传递 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);