2013-12-11 104 views
0

我有這樣的代碼,是給我一個取消警告<?>與<?擴展對象>

public Class getColumnClass(int column) { 
     return getValueAt(0, column).getClass(); 
    } 

的錯誤中提到了一些關於接受一個未經檢查的轉換,所以我嘗試添加Class<?>但它也建議把在Class<? extends Object>。我之前已經閱讀過這篇文章,但我不記得在哪裏。我認爲<?>表示它接受任何對象,並且? extends Object必須表示這個類是Object的一個子類,但不是那樣的東西?這兩個例子都沒有給我錯誤。

+0

這個問題已經回答了[這裏] [1],看看吧:) [1]:http://stackoverflow.com/questions/14346622/list- vs-list-extends-object – heyHugo

+0

啊我應該知道,謝謝。 – gallly

回答

1

它們都是同義詞。因此,有沒有區別

還檢查了這一點: - Converting Legacy Code to Use Generics

而且在this問題有兩個之間有非常微小的差別notnoop回答:

  1. 的JVMS(Java的虛擬機規範)具有用於無界通配符一個特殊規格,如ClassFileFormat-Java5的 指定無界通配符編碼爲*,而編碼 對象界定通配符作爲+ Ljava/LA納克/對象;.這種改變將通過分析字節碼的任何庫泄漏 。編譯器編寫者 也需要處理這個問題。從修訂到「類文件 格式」

  2. 從reifiablity的角度來看,這些是不同的。 JLS 4.6和4.7編纂List<?>作爲reifiable類型,但List<? extends Object>作爲 erasured類型。任何添加.isReifiable()(例如mjc lib) 的庫編寫者都需要考慮這一點,以遵守JLS術語。來自JLS 4.6和4.7。

1

沒有區別,它們是同義的。 I found a good answer for the same question

通過@ruakh:

<?><? extends Object>是同義的,如你所期望的,但也有少數病例與仿製藥,其中extends Object實際上不是多餘的。例如,<T extends Object & Foo>將導致T在擦除下變爲Object,而使用<T extends Foo>擦除後將變爲Foo(如果您試圖保留與使用Object的預泛型API的兼容性,則這可能很重要。)