我有一个名为grid的数组,声明如下:
public ArrayList<ArrayList<ArrayList<Entity>>> grid;
我试着这样设置:
grid = ctgf.blockMap;
其中ctgf内部的blockMap声明如下:
public ArrayList<ArrayList<ArrayList<Block>>> blockMap = new ArrayList<ArrayList<ArrayList<Block>>>();
只是为了澄清,类Block是这样扩展的:
public class Block extends Entity{
有谁知道我能在这做什么?
答案 0 :(得分:4)
<强>问题强>
ArrayList<Block>
不会延伸ArrayList<Entity>
。 (我简化了一点。)
为什么不呢?
尝试将Entity
放入ArrayList<Block>
。
new ArrayList<Block>().add(new Entity());
你不能这样做!但是任何ArrayList<Entity>
(或其任何子类)都必须能够插入Entity
。
new ArrayList<Entity>().add(new Entity());
因此,ArrayList<Block>
不能被视为ArrayList<Entity>
的子类。
<强>解决方案强>
(1)您可以将grid
声明为
public ArrayList<? extends ArrayList<? extends ArrayList<? extends Entity>>> grid;
?
中的? extends Entity
是“通配符”。这意味着实际类型未知,但必须扩展Entity
。
这可能对您有用,也可能没用,因为您只能从中获取Entity
(除非您在致电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);
}