如何在两个相似类之间共享对象? 例如,我想在游戏中有两个玩家:人类和计算机 他们将共享一个具有变量的Deck类:ArrayList cardList 人和计算机对象需要同时访问cardList以在游戏过程中绘制卡片。
将cardList arraylist作为构造函数中的参数传递给Human或Computer,以将卡添加到他们自己的手ArrayList中。在我将一些卡添加到手arraylist之后,是否可以返回已更改的cardList arraylist?
很抱歉,如果我的解释令人困惑
答案 0 :(得分:2)
ArrayList
是一个可变容器。如果将其传递给构造中的两个对象,则在其上发生的任何突变都将反映在任何其他引用上。基本上我所说的是:将ArrayList传递给两个对象,在任一对象中进行更改,更改将在另一个对象中可用,反之亦然。
https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html
答案 1 :(得分:1)
情况已经如此。如果您有三个类人类,计算机和甲板。
人类:
public class Human {
private Deck commonDeck;
private card currentCard;
public Human(Deck deck) {
commonDeck = deck;
}
public pickCard() {
currentCard = commonDeck.removeLastCard();
}
}
计算机:
public class Computer {
private Deck commonDeck;
private card currentCard;
public Computer(Deck deck) {
commonDeck = deck;
}
public pickCard() {
currentCard = commonDeck.removeLastCard();
}
}
甲板:
public class Deck {
private List<Card> cards;
public Deck(){
cards = new ArrayList<Card>();
/*populate the list*/
}
public Card removeLastCard() {
return cards.remove(cards.size() - 1);
}
}
然后在你的主要时你做:
public static void main() {
Deck deck = new Deck();
Human human = new Human(deck);
Computer computer = new Computer(deck);
//human and computer share the same deck object
human.pickCard(); //human will remove a card from the list deck.cards
//The deck object in computer is the same as in human
//So coputer will see that a card has been removed
}
如代码注释中所述,人类和计算机对象共享同一个deck对象。它们与Deck实例共享相同的引用。所以,无论你做什么,人类都会在电脑上看到它。