是否真的需要使用“扩展BoardGame”?

如果删除它,我的代码仍然有效,但是我不确定是否应该这样做。

我这样做是因为copy()方法。

有什么建议么。

谢谢

public interface BoardGame<GAME extends BoardGame>
{
    GAME getGame();

    BoardGame<GAME> copy();

    int currentPlayer();

    boolean isGameOver();

    int getTotalMoves();

    BoardResult getOutcome(int playerIndex);

    void makeMove(int moveIndex);

    void addMoveObserver(BoardGameMoveObserver observer);
}

最佳答案

从某种意义上来说,它们都可以编译,所以两者都可以。

如果使用<GAME extends BoardGame>,则所有实现都将需要使用扩展BoardGame的类型参数。如果任何方法采用参数或返回GAME值,这都是有意义的。

您的情况是getGame()。因此,在<GAME extends BoardGame>的情况下,所有getGame()的用户都可以算出返回值至少是BoardGame。但对于,getGame()可以返回定义的实现类的任何类型。

10-01 22:16