发布于 2年前

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、声明明确的类型,例如第一种情况的使用。

©2020 edoou.com   京ICP备16001874号-3