java - 为什么直接将 Arrays.asList() 分配给 var 时会出现 AssertionError?

标签 java arrays exception type-inference java-10

我正在努力理解 local variable type inference在 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

只有在 javac 时才会复制用 -g 调用标志。

可能的解决方法:

  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 中修复.

关于java - 为什么直接将 Arrays.asList() 分配给 var 时会出现 AssertionError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49558895/

相关文章:

JavaScript .push() 内部函数正在覆盖全局变量

.net - 使用Elmah编程地记录错误:记录特定信息

java - TitanDB 定义和使用索引

java - 如何在 IntelliJ IDEA 中运行 AnnotationProcessor?

python - 在numpy数组中用随机替换缺失值

java - Rest JAX-RS异常,未找到MessageBodyWriter

spring-boot - 没有 Controller 类的 Spring Boot 异常处理

java - 如何在屏幕上移动 jlabel 图像?

java - iPad 中下载的 PDF 具有 Servlet 的名称。如何解决这个问题

javascript - 如何在 JavaScript 中创建 'multi depth' 选择