var<T> 在 Java 中做了什么?

What does var<T> do in Java?

我的一个朋友注意到

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。

这确实是个bug,但证据就在Java Language Specification § 14.4 Local Variable Declaration Statements:

LocalVariableType:
    UnannType
    var

广告您可以看到,受限标识符 var 列出时没有任何其他标记。此外,UnannType 最终解析为令牌 TypeIdentifier,明确禁止 var.

所以不,var<Integer> 无效