在Java中共享两个类之间的对象

时间:2018-05-02 15:56:07

标签: java

如何在两个相似类之间共享对象? 例如,我想在游戏中有两个玩家:人类和计算机 他们将共享一个具有变量的Deck类:ArrayList cardList 人和计算机对象需要同时访问cardList以在游戏过程中绘制卡片。

将cardList arraylist作为构造函数中的参数传递给Human或Computer,以将卡添加到他们自己的手ArrayList中。在我将一些卡添加到手arraylist之后,是否可以返回已更改的cardList arraylist?

很抱歉,如果我的解释令人困惑

2 个答案:

答案 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实例共享相同的引用。所以,无论你做什么,人类都会在电脑上看到它。