我有以下代码,由于其他限制而以这种方式结束:
public interface Action { }
public interface Result { }
public interface Player<A extends Action, R extends Result, P extends Player<A, R, P>> { }
public interface Game<A extends Action, R extends Result, P extends Player<A, R, P>> { }
abstract public class AbstractGame<A extends Action, R extends Result, P extends Player<A, R, P>> implements Game<A, R, P> { }
public class RPSGame<P extends RPSPlayer<P>> extends AbstractGame<RPSGesture, RPSResult, P> { }
其他相关课程/接口:
abstract public class GesturePlayer<A extends Action, R extends Result, P extends GesturePlayer<A, R, P>> implements Player<A, R, P> { }
abstract public class RPSPlayer<P extends RPSPlayer<P>> extends GesturePlayer<RPSGesture, RPSResult, P> { }
public class RPSHumanPlayer extends RPSPlayer<RPSHumanPlayer> { }
public class RPSSimpleAIPlayer extends RPSPlayer<RPSSimpleAIPlayer> { }
public enum RPSGesture implements Gesture, Action, GestureFPSRules { }
public enum RPSResult implements Result { }
然后我注意到,由于所有更改,我在我的程序中使用原始类型,我根本不需要:
private void init() {
RPSGame rpsGame = new RPSGame();
rpsGame.addPlayer(new RPSHumanPlayer());
rpsGame.addPlayer(new RPSSimpleAIPlayer());
rpsGame.playGame();
}
这里RPSGame
是一种原始类型,而我最初打算将它作为原始类型,它添加了泛型以保持代码正常工作。
问题在于我无法使其成为非泛型的,因为代码不再编译我尝试过的所有内容,因此可以:
从RPSGame
班级删除泛型?
或者以这种方式定义RPSGame rpsGame
(使用类型参数),它是否编译?