之间的功能区别是什么
Container<Class>
和
Container<? extends Class>
继承自Class
的任何内容都是Class
,所以我不明白为什么要打扰?
。
答案 0 :(得分:3)
由于Class课程为final
,<? extends Class>
仅适用于Class
类型。
因此,Container<Class>
和Container<? extends Class>
之间没有功能差异。
更新:如果您的问题涉及什么是通配符?,如果我们假设我们不是在谈论Class
,而是在谈论其他一些问题(可扩展) )类型,这是区别:
假设我们有两个类:
class Shape
class Rectangle extends Shape
考虑以下方法签名:
public void addRectangle(List<? extends Shape> shapes)
这是有界通配符的示例,其中Shape
部分称为upper bound
。
public void addRectangle(List<? extends Shape> shapes) {
// Compile-time error!
shapes.add(0, new Rectangle());
}
编译时错误的原因是shapes.add()
的第二个参数的类型是? extends Shape
,在人类语言中意味着 一个未知的Shape子类型 即可。由于我们不知道它是什么类型,我们不知道它是否是Rectangle
的超类型。它可能是也可能不是超类型,因此传递Rectangle
是不安全的。
该例子取自: