如果有父,则Java intanceof为false

Ras*_*mus 1 java parents instanceof

我正在创建某种成就系统,我有一个类KillXEnemies,然后我继承了它的类,如KillXEnemiesWeapon(用某种武器杀死的敌人).当你杀死敌人时,我会通过成就对象循环并添加一个敌人已被杀死:

if(object instanceof KillXEnemies)
    ((KillXEnemies)object).addEnemyKilled();
Run Code Online (Sandbox Code Playgroud)

但随后KillXEnemiesWeapon也会被跟踪,因为它继承自KillXEnemies.我知道一个解决方案是:

if(object instanceof KillXEnemies && !(object instanceof KillXEnemiesWeapon))
    ((KillXEnemies)object).addEnemyKilled();
Run Code Online (Sandbox Code Playgroud)

但是我将要从KillXEnemies继承许多类,并且它似乎是一个糟糕的解决方案,有20个!(对象instanceof(---))

所以我想知道是否有更简单的方法来检查对象是否只是KillXEnemies而不是KillXEnemiesWeapon

T.J*_*der 5

您可以使用Object#getClass获取对象的实际类,然后将其与之进行比较KillXEnemies.class.

if (object.getClass().equals(KillXEnemies.class))
Run Code Online (Sandbox Code Playgroud)

这将是trueobjectKillXEnemies但如果object是它的一个子类的实例.

但我不知道(并认识到你有很多更多的信息比我做的工作,所以我可以很容易是错误的),如果类和子类是这个信息模型的最佳途径......