我有CardType1CardType2扩展了Card,还有一个Area具有Card的ArrayList。该数组将充满CardType1CardType2对象,但是我最终需要像这样访问它们:

for (CardType1 card : this.cards) { ...


概述:

public class Area {

    List<Card> cards = new ArrayList<Card>();
    ..
}

public class Card {..}

public class CardType1 extends Card {..}

public class CardType2 extends Card {..}


如何仅对List<Card> cards列表中的一种子类型进行迭代?

最佳答案

您无法通过这种方式进行操作,因为卡片中的对象类型是Card,而不是CardType1

for(CardType1 card : this.cards){ ...


但是,您可以这样做:

for(Card card : this.cards) {
    if (card instanceof CardType1) {
        CardType1 card1 = (CardType1) card;
        // do something with the card1
    } else {
        CardType2 card2 = (CardType2) card;
        // do something with the card2
    }
 }


我在这里所做的就是像以前一样遍历卡片(除了Object以外,我的类型是最通用的类​​型)。然后,使用CardType1运算符检查卡的类型是否为CardType2instanceOf,并将其转换为该类型,然后进行处理。

10-06 12:47