簡體   English   中英

子類的Arraylist不能分配給超類的arraylist

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM