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
等?
答案 0 :(得分:10)
每个new Object(){}
创建一个新类型(匿名类)。这些类型没有子类型 - 超类型关系,因此无法将a1
分配给a2
,反之亦然。
但是当你有两个long
变量时,两者实际上都有相同的类型long
,所以它们是相互可分配的。