我的一个朋友注意到了
var<Integer> list = new ArrayList<Double>();
在 Java 中有效。事实证明, 的类型list
被评估为ArrayList<Double>
。
使用时var<Integer> list = new ArrayList<>();
,list
就是ArrayList<Object>
。
我们俩都无法弄清楚泛型类型的var
作用,因为它似乎被忽略了。但如果是这样,为什么这首先在语法上是正确的?
事实证明,var<T>
只有在带有 JDT 内核的 Eclipse 中才允许使用 ,而 javac 不接受这一点。因此,我认为这是 Eclipse 中的一个错误。
编辑:正如@MC Emperor 所示,这绝对是一个错误。我已将此错误添加到 Eclipse Bugzilla。
这确实是一个错误,但证据在于Java 语言规范 § 14.4 局部变量声明语句:
LocalVariableType: UnannType var
您可以看到,受限标识符 var
在没有任何其他标记的情况下列出。此外,UnannType
最终解析为TypeIdentifier
明确禁止的令牌var
。
所以不,var<Integer>
是无效的。