gpt4 book ai didi

java - 子类的数组列表不能分配给父类(super class)的数组列表

转载 作者:行者123 更新时间:2023-11-30 07:12:54 25 4
gpt4 key购买 nike

我有一个名为 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> . (我简化了一点。)

为什么不呢?

尝试输入 EntityArrayList<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 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);
}

关于java - 子类的数组列表不能分配给父类(super class)的数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19921037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com