为什么我们不能将两个推断变量分配为彼此的匿名类?

ton*_*oan 2 java java-10

Java的10允许做一个anonymous classvar这样的:

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等等?

Rom*_*kiy 10

每个都new Object(){}创建一个新类型(匿名类).这些类型没有子类型 - 超类型关系,因此无法分配a1,a2反之亦然.

但是当你有两个long变量时,它们实际上都有相同的类型long,所以它们是相互可分配的.