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

时间:2018-03-30 19:39:36

标签: java java-10

Java 10允许使用anonymous class执行var

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

1 个答案:

答案 0 :(得分:10)

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

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