Объекты в ArrayList не сохраняют свой тип с использованием обобщений - PullRequest
1 голос
/ 23 февраля 2011

У меня есть двумерный ArrayList для хранения Block объектов для использования позже. Однако он не позволит мне вызывать Block методы для объектов, когда я получу их по индексу в списке. Вот код, где я инициализирую список:

ArrayList<ArrayList> col = new ArrayList<ArrayList>();

for(int column = 0; column < SIZE; column++) {
        // Add a row of block objects
        col.add(new ArrayList<Block>());

        // Populate the row
        for(int row = 0; row < SIZE; row++) {
            col.get(column).add(new Block());
            grid.add((Block) col.get(column).get(row));
        }
}

Проблема, похоже, в том, что когда я добавляю блок в grid (JPanel), он не скомпилируется, если я не приведу объект обратно к Block. Другими словами, grid.add(col.get(column).get(row)) не сработает Есть идеи, почему это может происходить?

1 Ответ

8 голосов
/ 23 февраля 2011

Вам нужно, чтобы оно было

ArrayList<ArrayList<Block>> col = new ArrayList<ArrayList<Block>>();

Если у вас есть только ArrayList<ArrayList>, то get будет выглядеть так:

ArrayList<ArrayList> col = new ArrayList<ArrayList>();
ArrayList list = col.get(i);
Object obj = list.get(j);

Так как list - это ArrayList без типавсегда будет возвращать Объект

...