EscapeNT
EscapeNT

Reputation: 37

Objects in ArrayList not retaining their type using generics

I have a two-dimensional ArrayList to store Block objects to use later. However, it won't let me call Block methods on the objects when I get them by their index in the list. Here is the code where I initialize the list:

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));
        }
}

The problem seems to be that when I go to add the block to the grid (a JPanel), it won't compile unless I cast the object back to a Block. In other words, grid.add(col.get(column).get(row)) won't work. Any ideas why this might be happening?

Upvotes: 1

Views: 292

Answers (1)

John Vint
John Vint

Reputation: 40256

You need it to be

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

When you have just ArrayList<ArrayList> the get's would look like this

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

Since list is an ArrayList with no type it will always return an Object.

If you have it as ArrayList<ArrayList<Block>> it would look like

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

Upvotes: 8

Related Questions