本文介紹了ImmuableList.Builder()錯誤?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我剛剛開始學習番石榴,我注意到ImmutableList.builder()
有些奇怪。
這不能編譯:
List<String> iList = ImmutableList.builder().add("One").add("Two").build();
//Type mismatch: cannot convert from List<Object> to List<String>
這行得通:
List<String> iList = new ImmutableList.Builder<String>().add("One").add("Two").build();
我可以接受使用new ImmutableList.Builder<String>()
,但這是ImmutableList.builder()
的錯誤嗎?
推薦答案
否,只需提供類型參數
List<String> iList = ImmutableList.<String>builder().add("One").add("Two").build();
這絕不是Guava中的錯誤,它只是Java語言的一個特性/限制。編譯器無法從以前的方法調用或要將結果賦值到的變量的聲明中推斷build()
的返回類型。
Angelika Langerexplains這個
自動類型參數推理。該方法的調用方式與常規方法一樣
非泛型方法,即不指定類型
爭論。在這種情況下,編譯器會自動推斷類型
來自調用上下文的參數。
她在Why does the type inference for an instance creation expression fail?
中也給出了類似的例子
String s = new ArrayList<>().iterator().next(); // error
和狀態
在上面的示例中,發出錯誤消息是因為新的
-表達式new ArrayList<;>()沒有構造函數參數,它既不出現在賦值的右側,也不顯示為
方法調用的參數。相反,它以鏈條的形式出現
方法調用的。這樣的鏈不是有效的類型推斷上下文。
這篇關于ImmuableList.Builder()錯誤?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,