2014-03-26 55 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

閱讀我的更新。 –