作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在下面的代码中,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>
的情况吗?是 Object
的子类(通常)但不是Team
?
最佳答案
Team<FootballPlayer>
不扩展Team
。泛型和继承是两个不同的概念。在 Java 中,编译器使用泛型来确保接受方法参数、实例变量等时的类型安全。编译器和运行时虚拟机都使用继承来启用多态性等功能。一个类可以具有通用参数,并且还可以扩展另一个不相关的类。
从你的代码中,我推断 FootballPlayer
延伸Player
但是Team<?>
不扩展Team
规范<T extends Team>
(如注释中所述,应该是 <T extends Team<?>>
)意味着当编译器在 League
中看到这一行时类:
public void add(T team)
它将接受 add
的调用参数类型为Team
或其任何子类。其他任何情况都会导致编译错误。
关于java - 泛型扩展行类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44869367/
我是一名优秀的程序员,十分优秀!