[英]Arraylist of subclass can not be assigned to arraylist of superclass
我有一個名為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{
有誰知道我在這里能做什么?
問題
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
? 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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.