gpt4 book ai didi

java - 将子类对象添加到父类(super class)列表中

转载 作者:行者123 更新时间:2023-12-01 20:13:32 25 4
gpt4 key购买 nike

我有一个方法,它接受一个父类(super class)的列表(特别是我的类 Mob)。它看起来像这样:

List<? extends Mob> mobs

我希望能够将任何扩展父类(super class) 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)

我可以做什么来解决这个问题?

编辑,将方法更改为 except 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>可以是任何扩展 Mob 的东西。它可能是 List<Mafia>编译器都知道。您不应该能够添加 ZombieList这可能是 List<Mafia> 。为了保持类型安全,编译器必须阻止此类调用。

要添加到此类列表,您必须删除通配符。

public static void spawnMob(Mob mob, List<Mob> mobs){

如果您可能必须传入 List具有特定子类,然后考虑使该方法通用:

public static <T extends Mob> void spawnMob(T mob, List<T> mobs){

关于java - 将子类对象添加到父类(super class)列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21894095/

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