Java 扩展行类型的泛型
在下面的代码中,Java 扩展行类型的泛型,java,generics,types,Java,Generics,Types,在下面的代码中,类团队提供了泛型 public class Team<T extends Player> { 问题:来自以下有效代码: League<Team<FootballPlayer>> league = new League<>(); 联盟=新联盟(); 我推断Team扩展了Team,这是真的吗? 任何团队都是对象(通常)的子类,但不是团队。团队不扩展团队。泛型和继承是两个不同的概念。在Java中,编译器在接受方法参数、实例变量等时使
类团队
提供了泛型
public class Team<T extends Player>
{
问题:来自以下有效代码:
League<Team<FootballPlayer>> league = new League<>();
联盟=新联盟();
我推断Team
扩展了Team
,这是真的吗?
任何团队
都是对象
(通常)的子类,但不是团队
。团队
不扩展团队
。泛型和继承是两个不同的概念。在Java中,编译器在接受方法参数、实例变量等时使用泛型来确保类型安全。编译器和运行时VM都使用继承来启用多态性等特性。一个类可以有泛型参数,也可以扩展另一个不相关的类
根据您的代码,我推断
FootballPlayer
扩展了Player
,但Team
没有扩展Team
规范
(如评论中所述,应该是为什么你会这样推断?不要使用原始类型。联赛的定义应该是职业联赛
。你甚至不应该问自己是否团队
扩展团队。团队是原始类型,你不应该使用原始类型。它们破坏了泛型的整个要点。不是吗谢谢,但是为什么前面的代码是有效的?我的意思是java中的团队如何处理它,它是什么~~!它是如何验证团队如果您有泛型类型团队的变量gt
,以及原始类型团队的变量rt
,那么rt
可以分配给gt
,反之亦然,因为使用原始类型基本上对编译器说:“我不关心泛型类型。回到编译的前泛型模式”。有关更多信息,请阅读JLS。还可以看到泛型类型中有子类型,但没有子类。Team
是Team
的子类型,但不是Team
的子类。在类型变量边界中使用extends
关键字只是对关键字的重用。类型变量实际上并没有扩展在绑定中指定的类。
League<Team<FootballPlayer>> league = new League<>();