2014-03-26 56 views
1

是什么泛型通配符混乱

Container<Class> 

Container<? extends Class> 

之间的功能区别?

Class继承的任何东西是Class所以我不明白为什么要打扰?

回答

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,其在人类语言意味着形状的一个未知的亚型。由于我们不知道它是什么类型,我们不知道它是否是超类型Rectangle。它可能也可能不是这样的超类型,所以在那里通过Rectangle是不安全的。

的例子取自:

+0

假设类不是最终的,然后呢? 如果东西继承形式类不能它仍然在容器? – whomaniac

+0

阅读我的更新。 –