我试图理解Java 10中的局部变量类型推断.
下面的代码在编译和运行时完美运行:
List list1 = Arrays.asList(1L, 2.0F, "3");
var list2 = list1;
Run Code Online (Sandbox Code Playgroud)但是,此行会引发编译错误:
var list3 = Arrays.asList(1L, 2.0F, "3");
Run Code Online (Sandbox Code Playgroud)
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允许做一个anonymous class有var这样的:
var a1 = new Object(){};
var a2 = new Object(){};
Run Code Online (Sandbox Code Playgroud)
但是这个赋值会抛出一个错误:
a1 = a2;
Run Code Online (Sandbox Code Playgroud)
jshell> a1 = a2; | Error: | incompatible types: $1 cannot be converted to $1 | a1 = a2; | ^^
基于错误日志,为什么不能Java的10分配两个推断varS上anonymous class对方,但它可以为其他类型,如做同样的Long,String等等?