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
您可以使用Object#getClass
获取对象的实际类,然后将其与之进行比较KillXEnemies.class
.
if (object.getClass().equals(KillXEnemies.class))
Run Code Online (Sandbox Code Playgroud)
这将是true
的object
是KillXEnemies
但如果object
是它的一个子类的实例.
但我不知道(并认识到你有很多更多的信息比我做的工作,所以我可以很容易是错误的),如果类和子类是这个信息模型的最佳途径......