我正在创建某种成就系统,我有一个 KillXEnemies 类,然后我从它继承了 KillXEnemiesWeapon 类(用某种武器杀死的敌人)。当你杀死一个敌人时,我循环遍历成就对象并添加一个敌人已经被杀死:
if(object instanceof KillXEnemies)
((KillXEnemies)object).addEnemyKilled();
但是 KillXEnemiesWeapon 也会被跟踪,因为它继承自 KillXEnemies。我知道一种解决方案是:
if(object instanceof KillXEnemies && !(object instanceof KillXEnemiesWeapon))
((KillXEnemies)object).addEnemyKilled();
但是我即将获得很多继承自 KillXEnemies 的类,拥有 20 个这样的类似乎是一个糟糕的解决方案!(object instanceof (---))
所以我想知道是否有更简单的方法来检查对象是否只是 KillXEnemies 而不是 KillXEnemiesWeapon
最佳答案
您可以使用 Object#getClass
获取对象的实际类,然后将其与 KillXEnemies.class
进行比较。
if (object.getClass().equals(KillXEnemies.class))
true
object
是一个 KillXEnemies
但如果 object
是一个子类的实例则不是
但我想知道(并且认识到您有比我更多的很多信息,所以我很容易出错)类和子类是否是对这些信息建模的最佳方式。 ..
关于Java instanceof false 如果有父,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15428099/