У меня проблема с пониманием некоторых ошибок компилятора, касающихся 2D-массивов (ArrayList, содержащих ArrayList) и обобщенных элементов.Мое понимание дженериков не самое лучшее, поэтому я попытался изучить проблему заранее и все еще был в замешательстве.
Согласно комментариям к 2D динамическому массиву с использованием ArrayList в Java , вы можетеНе смешивайте массивы с генериками (или, скорее, вы можете с @SuppressWarnings («unchecked»), но не рекомендуется делать это).Однако я не уверен, что именно это означает.
Вот мой код проблемы:
blocks = new ArrayList<ArrayList<BarrierBlock>>(columns); // initialize rows
for (int i = 0; i < columns; i++){
// blocks.get(i) = new ArrayList<BarrierBlock>(rows); <- ERROR = (unexpected type; required: variable, found: value)
blocks.add(new ArrayList<BarrierBlock>(rows)); // initialize columns
}
// initilize each block
for (int i = 0; i < blocks.size(); i++){
for (int j = 0; i < blocks.get(i).size(); j++){
int[] blockLoc = {location[0] + (i*BLOCK_SIDE_LENGTH), location[1] + (j*BLOCK_SIDE_LENGTH)};
// blocks.get(i).get(j) = new BarrierBlock(BLOCK_SIDE_LENGTH, blockLoc); <- ERROR = (unexpected type; required: variable, found: value)
blocks.get(i).add( new BarrierBlock(BLOCK_SIDE_LENGTH, blockLoc)); // initialize 2D array elements
}
}
Две строки, которые я закомментировал, были моими первоначальными попытками инициализации массивов.Компилятор пожаловался, когда я попробовал это, и выдал мне указанную ошибку.Что означает эта ошибка?Я думаю, что обе стороны оператора объявления являются переменными.
Осмотревшись, я обнаружил, что должен использовать метод add (E e) ArrayList.Но в чем главное отличие?По-новому я инициализирую массивы, разве это не «смешивает массивы с обобщениями»?