我有一个物品列表,我想从该列表中提取武器物品。武器可以扩展物品,但还有另外一种方法:getBonus()
,这会给玩家带来额外的伤害。
现在,我可以使用instanceof轻松提取武器的物品。我通过基于索引的for
循环运行它们,如果是武器,我将其检索。但是,我无法在列表中的那个Item元素上调用武器方法,因为instanceof
我知道它是武器,因为它的类型是“ Item”而不是“ Weapon”。
我对编码还比较陌生,因此由于缺乏知识,可能有很多我没有尝试过的解决方案。我尝试过类型转换,但没有用。
for(int i = 0; i < backpack.size(); i++) {
if(backpack.get(i) instanceof Sword) {
IItem item = backpack.get(i);
backpack.remove(i);
equipped = item;
initialDmg += equipped.getBonus();
checkInventory(game);
game.formatMessage("You equipped a %s, and now hit for %d dmg!", item.getName(), getDamage());
}
}
行
equipped.getBonus();
不起作用,因为设备类型为IItem,而getBonus();
方法来自Weapons接口,该接口扩展了IItem接口。 Sword是一个实现Weapons接口的类。
我希望能够从属于武器实例的项目中调用getBonus()
方法,但是我不知道该如何使用for循环来做到这一点?
在我看来,这是因为我要遍历的列表由IItem-elements组成。但是,我不能将其更改为仅包含武器元素,因为背包应该能够携带普通物品和武器。如前所述,某些元素是武器。
即使是Weapon实例(在本例中为剑),即使它是Item类型的元素,我也如何才能使索引i的元素使用武器方法呢?