有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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可以设置为FootballPlayer,而player2可以设置为CricketPlayer,因为两者都是从Player类扩展而来的。所以现在一个队中的两名球员是不同类型的。我的目标失败了,我希望一支球队拥有同样类型的球员。有没有办法做到这一点。提前谢谢你的帮助


共 (1) 个答案

  1. # 1 楼答案

    这样的等级制度是无法实现的

    尽管可以使用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>来限制内部的类型呢