我正在努力理解 local variable type inference在 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
只有在 javac
时才会复制用 -g
调用标志。
可能的解决方法:
- 请勿使用
-g
旗帜- 如果你使用IDEA:设置→构建、执行、部署→编译器→Java编译器→取消选中“生成调试信息”
- 请勿使用
var
具有交集类型(使用显式类型):-
List<Object> list = Arrays.asList(1L, 2.0F, "3");
-
var list = Arrays.<Object> asList(1L, 2.0F, "3");
-
- 使用自带编译器的 Eclipse
UDPATE:
该错误已在 JDK 10.0.2 中修复.
关于java - 为什么直接将 Arrays.asList() 分配给 var 时会出现 AssertionError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49558895/