2

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的 s分配anonymous class给彼此,但它可以对 , 等其他类型做同样的Long事情String

4

1 回答 1

10

每个都new Object(){}创建一个新类型(一个匿名类)。这些类型没有子类型-超类型关系,因此不能分配a1a2,反之亦然。

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

于 2018-03-30T19:41:44.950 回答