问题
ArrayList<Block>
不延长ArrayList<Entity>
。(我简化了一点。)
为什么不?
尝试将Entity
a放入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
。
这可能对您有用,也可能没有用,因为您只能从中获取Entity
s (除非您在调用 后强制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);
}