为什么我们不能将两个推断变量分配为彼此的匿名类?
Java 10允许使用var
这样的anonymous class
:
var a1 = new Object(){}; var a2 = new Object(){};
但是这个赋值会抛出一个错误:
a1 = a2;
jshell> a1 = a2; | Error: | incompatible types: $1 cannot be converted to $1 | a1 = a2; | ^^
基于错误日志,为什么Java 10不能将两个推断的var
作为anonymous class
分配给彼此,但它可以对其他类型(如Long
, String
等)执行相同的操作。
每个new Object(){}
都会创建一个新类型(匿名类)。 这些类型没有子类型 – 超类型关系,因此无法将a1
分配给a2
,反之亦然。
但是当你有两个long
变量时,它们实际上都具有相同的long
,因此它们是可相互分配的。