Player中的onPostAction方法本身就是通用的.你已经在那里定义了P.因此,任何覆盖它的方法也必须是通用的.
尝试
public class RPSHumanPlayer extends RPSPlayer {
@Override
public
> void onPostAction(final P target,
final RPSGesture gesture, final RPSResult result) { }
}
A和R已经被GesturePlayer定义为RPSGesture和RPSResult,但仍然需要声明P.
加成
如果它需要是那个确切的签名,那么你必须在Player界面上定义P以及A和R:
public interface Player> {
default public void onPostAction(final P target, final A action, final R result) { }
}
然后GesturePlayer相应地改变:
abstract public class GesturePlayer
P extends Player
然后RPSPlayer将自己定义为P.
abstract public class RPSPlayer extends GesturePlayer { }
并且RPSHumanPlayer可以具有以下方法:
public class RPSHumanPlayer extends RPSPlayer {
@Override
public void onPostAction(final RPSPlayer target, final RPSGesture gesture, final RPSResult result) { }
}