在下面的代码中,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
的子类呢?
答案 0 :(得分:1)
Team<FootballPlayer>
不延伸Team
。泛型和遗传是两个不同的概念。在Java中,编译器使用泛型来确保在接受方法参数,实例变量等时的类型安全性。编译器和运行时VM都使用Inheritence来启用多态等功能。类可以具有泛型参数,也可以扩展另一个不相关的类。
从您的代码中,我推断FootballPlayer
扩展Player
但Team<?>
未扩展Team
规范<T extends Team>
(如评论中所述,应该是<T extends Team<?>>
)表示当编译器在League
class:
public void add(T team)
它将使用add
类型的参数或其任何子类来调用Team
。任何其他情况都会导致编译错误。