[英]Accessing an Array List contents in a different class
我有卡對象的數組列表hand
在一個類中。 此數組列表hand
一直呆在私人。 在不同的類中,我需要訪問此數組列表中的Card對象,並在每個對象上調用toString()
方法以將它們轉換為可讀的卡名。 因此,我在包含返回手的數組列表hand
的類中創建了一個getHand()
方法。 但是,現在我該如何訪問手中的單個卡? 因為例如,如果我做hand.get(i).getSuit()
,那么它就不能這樣做,因為hand
是私有的。 任何建議表示贊賞。
A類:
private ArrayList<Card> hand;
public Player()
{
ArrayList<Card> hand = new ArrayList<Card>();
}
...
B級:
...
public String toString(){
this.getSuit();
this.getValue();
//code to convert numerical suit and value to a string
//this method will use a Card object
//as an implicit parameter
C級:
Player p = new Player();
p.getHand();
//next I need to indicate that each card
//within hand needs to be called with
//the toString method? This is my question
p.getHand()
將返回ArrayList<Card>
因此您只需要遍歷它並打印每個Card對象的.toString()
Player p = new Player();
ArrayList<Card> cards = p.getHand();
for (Card card : cards)
{
System.out.println(card.toString());
}
您必須調用getHand()
而不是直接使用ArrayList
,因為getHand()
是公共getter,其他類可以調用它,但是hand
是私有的,並且只能在ClassA內部訪問,而無需使用任何getter或setter。
另外,您的Player
構造函數應如下所示
public Player()
{
this.hand = new ArrayList<Card>();
}
最好避免返回Player類的成員變量(這違反了Demeter法則)。
以下是一些替代方案:
class Player implements Iterable<Card> {
...
public Iterator<Card> iterator() {
return cards.iterator();
}
...
}
另外一個選項:
interface CardVisitor {
public void visitCard(Card card);
}
class Player {
...
public void visitCards(CardVisitor visitor) {
for (Card card : cards)
visitor.visitCard(card);
}
...
}
class CardPrinter {
public String toString() {
StringBuilder sb = new StringBuilder();
...
CardVisitor visitor = new CardVisitor() {
public void visitCard(Card card) {
sb.append(card.toString()); // or something like that
}
}
player.visitCards(visitor);
...
return sb.toString();
}
}
還有很多其他方法可以解決此問題,但是我想您明白我的意思。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.