Item
是带有子类Potion, Weapon. Shield
的抽象类。useItem()
方法是在每个Item's
子类中定义的抽象方法get_item
类Item
的返回对象getItem
方法返回Item
的子类的对象
case "use":
if (hero.get_item() instanceof Potion) {
hero.<Potion>getItem(Potion.class).useItem();
} else if (hero.get_item() instanceof Weapon) {
hero.<Weapon>getItem(Weapon.class).useItem();
} else if (hero.get_item() instanceof Shield) {
hero.<Shield>getItem(Shield.class).useItem();
}
break;
有没有一种方法可以将这段代码压缩为类似...
Class itemclass = hero.getItem().getClass();
hero.<itemclass>getItem(itemclass.class).useItem();
上面的代码无法编译,但是我正在寻找类似的东西。我试图避免使用
if else
语句,因为还有更多项目。编辑:
我最初不使用
hero.get_item().useItem()
的原因是我试图做
Weapon sword = hero.get_item();
这样我就可以访问诸如
sword.getDamage()
之类的方法但是,我会得到错误
error: incompatible types: Item cannot be converted to a Weapon
所以这就是为什么我创建了(来自@marsouf的帮助)
hero.<Weapon>getItem(Weapon.class)
今天,我创建了方法
abstract public void useItem();
并且由于它是
Item
类的方法,因此我可以使用hero.getItem().useItem()
最佳答案
使用方法Interface
为Item
避开useItem()
会更有意义。
然后为Potion
,Shield
等实现。
这样,您就不必进行强制转换并使它变得比实际复杂。
如果useItem()
没有提供任何功能,则它不属于抽象类,并且现在不需要的接口也可以具有default
方法。