java - Java 是否有等效的 const 引用?

标签 java c++ constants

这是一段代码:

    //Game board is made up of Squares.  A player can place GamePieces on a Square.
    public class CheckersBoard
    {
        public boolean PlaceGamePiece(GamePiece gamePiece, int nRow, int nColumn) {
            return m_theGameBoard[nRow][nColumn].PlaceGamePiece(gamePiece);
        }

        private Square[][] m_theGameBoard;
    }

假设我正在测试 PlaceGamePiece 方法(使用 junit)并且我需要访问 m_theGameBoard 以便我可以查看它并验证 GamePiece 是否放置在正确的 Square 上并且具有正确的数据。

在 C++ 中,我要么使测试类成为友元,以便它可以访问私有(private)成员 m_theGameBoard,要么我有一个返回无法修改的 const GameBoard 的函数(因为它是 const):

const GameBoard& GetGameBoard() const { return m_theGameBoard; }

现在我可以在游戏板上做我想做的任何检查,但我不能修改游戏板,因为它是常量。

Java 不支持返回 const 引用或友元类。所以我的问题是标准的 Java 方法是什么?我是否必须只提供一组 get 访问器来检查 Square 上的数据?

更新: 我最终按照 Kaleb Brasee 的建议编写了一个 GetPiece 方法。

public GamePiece GetGamePiece(Point pt) {
    return new GamePiece(m_theGameBoard[pt.GetRow()][pt.GetColumn()]);
}

注意我创建了一个新的 GamePiece 对象并返回它。我不会返回 GameBoards 内部引用,因此没有人可以修改游戏板,因为他们只有一份拷贝!好的!感谢大家的帮助,一些非常好的建议。

仅供引用:当我将它们发布到此处时,我一直在更改对象的名称,如果这让任何人感到困惑,我们深表歉意。

最佳答案

将变量定义为protected,这样如果单元测试在同一个包中,它就可以访问它。

但是,我只想添加一个公共(public)方法 getPiece(int row, int col) 返回那个方 block 上的棋子(如果那里没有棋子则返回 null)。无论如何,您很可能需要这样的方法,并且可以在测试中使用它。

关于java - Java 是否有等效的 const 引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2152285/

相关文章:

java - 使用 JMS 2.0 自动资源定义的用户定义

c++ - 可以在 C++ 模板中强制使用连续的分配边界吗?

c++ - 如何检查文件是否被压缩?

python - Python 中的常量参数

c++ - 在 C++ 中更改 static const int 的值

java - 普通变量和常量变量之间的区别?

java - Hibernate 应用程序作为 Azure 中的 WebJob "Could not open connection"异常

使用 clean、install、run as 构建 Java Maven 项目

java - 使用 JarOutputStream 制作可运行的 jar 文件

c++ - Qt,从 qApp->processEvents() 中排除事件