传递 class 以在函数中使用 instanceof
Passing class to use instanceof in a function
我有一个class结构:
class BonusCard{
}
class AddResourceCard extends BonusCard{
}
class AddGoldCard extends BonusCard{
}
现在,我还有一个函数,我想在其中传递 AddResourceCard 或 AddGoldCard,在某人的 Inventory 中,我想检查该 Inventory 中的对象是否是我放入的 class 的实例功能。
private void removeCardFromPlayer(Player player, BonusCard cardToRemove){
for(BonusCard card : player.getInventory().getBonusCards()){
if(card instanceof cardToRemove.getClass()){ //this line doesn't work sadly
player.getInventory().getBonusCards().remove(card);
break;
}
}
}
函数调用应如下所示:
removeCardFromPlayer(player, AddResourceCard);
或
removeCardFromPlayer(player, AddGoldCard);
应该有一种简单直接的方法来完成我想做的事情,老实说,我真的不知道要搜索什么。
我将向父 class 添加新的抽象方法 boolean canBeRemoved()
。并在子 classes.
中覆盖并实现它
然后在循环中,我将调用此方法并执行相应操作。
我想你要找的是card.getClass().equals(cardToRemove.getClass())
。
这会比较两个对象的类并检查它们是否相同。
如果您想考虑一些层次结构,那么您可能宁愿选择 isAssignableFrom 而不是 equals
您可能想传递 class 本身:
private void removeCardFromPlayer(Player player, Class<? extends BonusCard> typeToRemove) {
for (BonusCard card : player.getInventory().getBonusCards()) {
if (typeToRemove.isInstance(card)) {
player.getInventory().getBonusCards().remove(card);
break;
}
}
}
对该方法的调用如下所示:
removeCardFromPlayer(player, AddResourceCard.class);
removeCardFromPlayer(player, AddGoldCard.class);
我有一个class结构:
class BonusCard{
}
class AddResourceCard extends BonusCard{
}
class AddGoldCard extends BonusCard{
}
现在,我还有一个函数,我想在其中传递 AddResourceCard 或 AddGoldCard,在某人的 Inventory 中,我想检查该 Inventory 中的对象是否是我放入的 class 的实例功能。
private void removeCardFromPlayer(Player player, BonusCard cardToRemove){
for(BonusCard card : player.getInventory().getBonusCards()){
if(card instanceof cardToRemove.getClass()){ //this line doesn't work sadly
player.getInventory().getBonusCards().remove(card);
break;
}
}
}
函数调用应如下所示:
removeCardFromPlayer(player, AddResourceCard);
或
removeCardFromPlayer(player, AddGoldCard);
应该有一种简单直接的方法来完成我想做的事情,老实说,我真的不知道要搜索什么。
我将向父 class 添加新的抽象方法 boolean canBeRemoved()
。并在子 classes.
然后在循环中,我将调用此方法并执行相应操作。
我想你要找的是card.getClass().equals(cardToRemove.getClass())
。
这会比较两个对象的类并检查它们是否相同。 如果您想考虑一些层次结构,那么您可能宁愿选择 isAssignableFrom 而不是 equals
您可能想传递 class 本身:
private void removeCardFromPlayer(Player player, Class<? extends BonusCard> typeToRemove) {
for (BonusCard card : player.getInventory().getBonusCards()) {
if (typeToRemove.isInstance(card)) {
player.getInventory().getBonusCards().remove(card);
break;
}
}
}
对该方法的调用如下所示:
removeCardFromPlayer(player, AddResourceCard.class);
removeCardFromPlayer(player, AddGoldCard.class);