Вот фрагмент кода:
//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 был помещен на правильный квадрат и имеет правильные данные.
В C ++ я бы либо сделал тестовый класс другом, чтобы он мог получить доступ к закрытому члену m_theGameBoard, либо получил бы функцию, которая возвращает const GameBoard, который нельзя изменить (потому что он const):
const GameBoard& GetGameBoard() const { return m_theGameBoard; }
Теперь я могу делать то, что проверяю на игровом поле, но я не могу изменить игровое поле, потому что оно постоянное.
Java не поддерживает возврат константных ссылок или классов-друзей. Итак, мой вопрос, что является стандартным способом Java сделать это ?? Должен ли я просто предоставить несколько методов доступа get, которые позволяют мне проверять данные на Square
?
UPDATE:
Я закончил тем, что написал метод GetPiece, как предложил Калеб Брейз.
public GamePiece GetGamePiece(Point pt) {
return new GamePiece(m_theGameBoard[pt.GetRow()][pt.GetColumn()]);
}
Обратите внимание, я создаю новый объект GamePiece и возвращаю его. Я не возвращаю внутреннюю ссылку на GameBoards, поэтому никто не может изменять игровую доску, потому что у них есть только копия! Ницца! Спасибо за помощь, ребята, очень хороший совет.
К вашему сведению: я продолжаю менять названия объектов, когда выкладываю их здесь, извините, если это кого-то смутило.