簡體   English   中英

為什么在直接將Arrays.asList()分配給var時會出現AssertionError?

[英]Why am I getting an AssertionError when assigning Arrays.asList() to var directly?

我試圖理解Java 10中的局部變量類型推斷

  1. 下面的代碼在編譯和運行時完美運行:

     List list1 = Arrays.asList(1L, 2.0F, "3"); var list2 = list1; 
  2. 但是,此行會引發編譯錯誤:

     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的類型,並對list2list3進行相同的處理。 提前致謝。

這是Java 10編譯器中的一個錯誤: https//bugs.openjdk.java.net/browse/JDK-8199910

只有在使用-g標志調用javac時才會重現它。

可能的解決方法:

  1. 不要使用-g標志
    • 如果您使用IDEA:設置→構建,執行,部署→編譯器→Java編譯器→取消選中“生成調試信息”
  2. 不要將var與交集類型一起使用(使用顯式類型):
    • List<Object> list = Arrays.asList(1L, 2.0F, "3");
    • var list = Arrays.<Object> asList(1L, 2.0F, "3");
  3. 使用具有自己的編譯器的Eclipse

UDPATE:

該錯誤已在JDK 10.0.2中修復。

這是OpenJDK的一個錯誤,請參閱

Javac應該跳過LocalVariableTypeTable屬性中的不可表示的類型

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM