问题
ArrayList<Block>不延长ArrayList<Entity>。(我简化了一点。)
为什么不?
尝试将Entitya放入ArrayList<Block>.
new ArrayList<Block>().add(new Entity());
你不能这样做!但是任何ArrayList<Entity>(或其任何子类)都必须能够Entity插入 s。
new ArrayList<Entity>().add(new Entity());
因此,ArrayList<Block>不能被视为ArrayList<Entity>.
解决方案
(1) 您可以声明grid为
public ArrayList<? extends ArrayList<? extends ArrayList<? extends Entity>>> grid;
?in是一个“? extends Entity通配符”。这意味着实际类型未知,但它必须扩展Entity。
这可能对您有用,也可能没有用,因为您只能从中获取Entitys (除非您在调用 后强制get转换),并且您将无法向其中添加任何内容(因为实际类型未知)。
(2) 或者你可以决定你真正想要的是一个ArrayList<ArrayList<ArrayList<Entity>>>. 在这种情况下,它会很冗长。
grid = new ArrayList<ArrayList<ArrayList<Entity>>>();
for(ArrayList<ArrayList<Block> blockList1 : ctgf.blockMap) {
ArrayList<ArrayList<Entity>> entityList1 = new ArrayList<ArrayList<Entity>>();
for(ArrayList<Block> blockList2: blockList1) {
entityList1.add(new ArrayList<Entity>(blockList2));
}
grid.add(entityList1);
}