var<T> 在 Java 中有什么作用?

Joj*_*oja 9 java generics var ecj

我的一个朋友注意到了

var<Integer> list = new ArrayList<Double>();
Run Code Online (Sandbox Code Playgroud)

在 Java 中有效。事实证明, 的类型list被评估为ArrayList<Double>

使用时var<Integer> list = new ArrayList<>();list就是ArrayList<Object>

我们俩都无法弄清楚泛型类型的var作用,因为它似乎被忽略了。但如果是这样,为什么这首先在语法上是正确的?

Joj*_*oja 8

事实证明, 的使用var<T>只允许在带有 JDT 核心的 Eclipse 中使用,javac 不接受这一点。因此,我认为这是 Eclipse 中的一个错误。

编辑:正如@MC Emperor 所示,这绝对是一个错误。我已将此错误添加到 Eclipse Bugzilla。


MC *_*ror 5

这确实是一个错误,但证据在于Java 语言规范 § 14.4 局部变量声明语句

LocalVariableType:
    UnannType
    var
Run Code Online (Sandbox Code Playgroud)

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

所以,不,var<Integer>不是有效。