![](/img/trans.png)
[英]Why I am able to use Arrays.asList method with an object declared for interface, List, but not when it is declared as an instance of class ArrayList?
[英]Why am I getting an AssertionError when assigning Arrays.asList() to var directly?
我試圖理解Java 10中的局部變量類型推斷 。
下面的代碼在編譯和運行時完美運行:
List list1 = Arrays.asList(1L, 2.0F, "3"); var list2 = list1;
但是,此行會引發編譯錯誤:
var list3 = Arrays.asList(1L, 2.0F, "3");
Error:java: java.lang.AssertionError: Unexpected intersection type: java.lang.Object&java.io.Serializable&java.lang.Comparable<? extends java.lang.Object&java.io.Serializable&java.lang.Comparable<?>>
我真的不明白為什么第二種情況是錯誤的但不是第一種情況。 因為我希望編譯器會推斷出list1
的類型,並對list2
和list3
進行相同的處理。 提前致謝。
這是Java 10編譯器中的一個錯誤: https : //bugs.openjdk.java.net/browse/JDK-8199910
只有在使用-g
標志調用javac
時才會重現它。
可能的解決方法:
-g
標志
var
與交集類型一起使用(使用顯式類型):
List<Object> list = Arrays.asList(1L, 2.0F, "3");
var list = Arrays.<Object> asList(1L, 2.0F, "3");
該錯誤已在JDK 10.0.2中修復。
這是OpenJDK的一個錯誤,請參閱此 :
Javac應該跳過LocalVariableTypeTable屬性中的不可表示的類型
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.