2012-05-25 69 views
4
int j = 0; 
List<Integer> i = j > 0 ? Collections.emptyList() : new ArrayList<Integer>(); // compiler error:cannot convert from List<capture#1-of ? extends Object> to List<Integer> 

而砌,Collections.emptyList()

List<Integer> li = Collections.emptyList(); // it works 

雖然我知道是什麼類型擦除,我不原因編譯失敗!

幫助,thx!

+1

相關問題:http://stackoverflow.com/questions/306713/java-collections-emptylist-returns-a-listobject –

回答

7

試試這個:

List<Integer> i = j > 0 ? Collections.<Integer>emptyList() : new ArrayList<Integer>(); 
+0

是的,它的工作原理,這也是我的解決方案 – xiaok

2

在第一個例子你是不是讓Java來捕捉<T>public static <T> List<T> Collections.emptyList()因爲你沒有直接分配給它的變種。 Java的類型推斷非常弱,無法通過條件運算符看到。在第二個例子中,你有一個簡單的情況,T被成功捕獲到Integer

+0

我從來不認爲java的類型推斷是如此薄弱! thx也是! – xiaok

0

第二個原因的原因是編譯器能夠從存儲結果的變量類型中找出所需的確切類型。 OTOH Java的類型caclulation在第一種情況下功能不夠強大

相關問題