我有CardType1
和CardType2
扩展了Card
,还有一个Area
具有Card的ArrayList
。该数组将充满CardType1
和CardType2
对象,但是我最终需要像这样访问它们:
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
运算符检查卡的类型是否为CardType2
或instanceOf
,并将其转换为该类型,然后进行处理。