泛型扩展行类型

时间:2017-07-02 09:35:44

标签: java generics types

在下面的代码中,class Team提供了泛型,

public class Team<T extends Player>
{

使用泛型声明另一种类型League

public class League<T extends Team>
{

问题:来自以下有效代码:

League<Team<FootballPlayer>> league = new League<>();

我推断Team<FootballPlayer>延伸Team,是真的吗? 是不是Team<T>是[{1}}(通常)的子类而不是Object的子类呢?

1 个答案:

答案 0 :(得分:1)

Team<FootballPlayer> 延伸Team。泛型和遗传是两个不同的概念。在Java中,编译器使用泛型来确保在接受方法参数,实例变量等时的类型安全性。编译器和运行时VM都使用Inheritence来启用多态等功能。类可以具有泛型参数,也可以扩展另一个不相关的类。

从您的代码中,我推断FootballPlayer扩展PlayerTeam<?>未扩展Team规范<T extends Team>(如评论中所述,应该是<T extends Team<?>>)表示当编译器在League class:

中看到这一行时

public void add(T team)

它将使用add类型的参数或其任何子类来调用Team。任何其他情况都会导致编译错误。