[英]Adding subclass object to superclass list
我有一个方法,需要一个超类的列表(特别是我的Mob类)。 看起来像这样:
List<? extends Mob> mobs
我希望能够添加将超类Mob扩展到此列表的任何对象,如下所示:
spawnMob(new Zombie(World.getInstance(), 0, 0), World.getInstance().getZombies());
这里是有问题的方法:
public static void spawnMob(Mob mob, List<? extends Mob> mobs){
mobs.add(mob);
}
这行代码World.getInstance().getZombies()
返回对象Zombie的列表。 僵尸扩展了暴民。
但是,以下代码行:
mobs.add(mob);
引发此错误:
The method add(capture#1-of ? extends Mob) in the type List<capture#1-of ? extends Mob> is not applicable for the arguments (Mob)
我该怎么解决?
在将方法更改为List<Mob>
以外的方法后进行编辑,我收到此错误:
The method spawnMob(Mob, List<Mob>) in the type MobSpawner is not applicable for the arguments (Zombie, List<Zombie>)
除了null
,您不能将其他任何内容添加到使用上限通配符指定的List
。 List<? extends Mob>
List<? extends Mob>
可以是扩展Mob
的任何东西。 对于所有编译器来说,它都可以是List<Mafia>
。 你不应该能够添加一个Zombie
的List
,可能是一个List<Mafia>
。 为了保持类型安全,编译器必须阻止此类调用。
要添加到此类列表,必须删除通配符。
public static void spawnMob(Mob mob, List<Mob> mobs){
如果您可能必须传递带有特定子类的List
,请考虑使该方法通用:
public static <T extends Mob> void spawnMob(T mob, List<T> mobs){
尝试使用List<Mob> mobs
。
您可以将列表声明为List<Mob> mobs
,然后将接受Mob
任何子类。 请注意,当您从列表中获取项目时,您将只能确定它们是Mob
类型。 您将必须进行一些测试以查看其类型。
只需创建小怪列表为
List<Mob> mobs;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.