Java - 将self的实例传递给ActionListeners

时间:2016-03-21 03:26:10

标签: java

我正在使用JButtons创建一个小型国际象棋游戏,作为棋盘的每个单独的牌。然后,我使用以下代码为每个磁贴(总共64个)提供一个动作监听器:

for (int y = 0; y < chessBoardColumns; y++) {
    for (int x = 0; x < chessBoardRows; x++) {
        JButton square = new JButton();
        ActionListener squareListener = new ChessSquareListener(this);
        chessBoardSquares[x][y] = square;
        chessBoardSquares[x][y].addActionListener(squareListener);
    }
}

动作侦听器位于单独的包中,如下所示:

public class ChessSquareListener implements ActionListener {
    private ChessGame game;

    public ChessSquareListener(ChessGame game) {
        this.game = game;
    }

    public void actionPerformed(ActionEvent e) {
        game.doSomething();
    }
}

正如您所看到的,我将整个游戏的实例传递给每个方块收听者。这会为每个听众创建64个游戏副本,还是仅仅传递对游戏实例的引用?

1 个答案:

答案 0 :(得分:1)

您可能会发现此答案很有用: Is Java "pass-by-reference" or "pass-by-value"?

无论如何,因为类的每个实例实际上都是Java中的指针,所以问题的答案是它只是将引用(指针)传递给游戏实例(如prasad的注释所述) 。因此,Java不会创建副本,这意味着另一方面,如果侦听器将操纵传递的“实例”(this),则操作将影响所有64个侦听器使用的一个实例。

如果您需要更多见解,请告诉我:)。