Java 10 赋值Arrays.asList给var变量:AssertionError: Unexpected intersection type
体验了下Java 10的局部变量类型推断var。使用List.of()给var赋值。
List list1 = Arrays.asList(1, "a",10L);
var list2 = list1;
上面通过中间的list1再赋值给var,编译通过。但如果直接使用Arrays.asList()赋值给var,如:
var list3 = Arrays.asList(1, "a",10L);
报AssertionError:
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<?>>
at jdk.compiler/com.sun.tools.javac.jvm.ClassWriter.enterInner(ClassWriter.java:1043)
at jdk.compiler/com.sun.tools.javac.jvm.ClassWriter$CWSignatureGenerator.classReference(ClassWriter.java:312)
原因:
这是java 10的bug,查看:https://bugs.openjdk.java.net/browse/JDK-8199910。现在这个bug已经修复。
解决方法:
1、javac编译不要使用-g
在IDEA禁用-g:
Settings → Build, Execution, Deployment → Compiler → Java Compiler → 去掉 "Generate Debugging Info"勾选
2、声明明确的类型,例如第一种情况的使用。