我们可以强制泛型类型接受其参数化类型作为一个类型的具体子类,而不是该类型本身吗


class Team<E extends Player> {
E player1;
E player2;
}
abstract class Player{
}
class CricketPlayer extends Player{}
class BaseballPlayer extends Player{}
class FootballPlayer extends Player{}

我现在明白了,我可以创建如下具有相同类型球员的球队,这将适用于

Team<CricketPlayer> cricketTeam = new Team<>()
Team<BaseballPlayer> baseballTeam = new Team<>()

但也有人可以创建一个团队,如下

Team<Player> invalidTeam = new Team<>();

在这种情况下,player1可以设置为FootballPlayerplayer2可以设置为CricketPlayer,因为两者都是从Player类扩展而来的。因此,现在一支球队中的两名球员是不同类型的。目标落空了,我希望一支球队拥有同样类型的球员。有没有办法做到这一点。感谢您提前帮助

使用这样的层次结构是无法实现的。

尽管您可以在Team<E extends Player>中使用下一个方法来检查与上一个值的兼容性:

public void setPlayer2(E player2) {
Class<? extends Player> player1Class = player1.getClass();
Class<? extends Player> player2Class = player2.getClass();
if (player1Class.getSimpleName() != player2Class.getSimpleName()) {
throw new RuntimeException("Incorrect type for player2!");
}
this.player2 = player2;
}

这将使可维护性复杂化。

那么,为什么不能只使用Team<BaseballPlayer>Team<BaseballPlayer>来限制内部的类型呢?

最新更新