9

我的一个朋友注意到了

var<Integer> list = new ArrayList<Double>();

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

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

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

4

2 回答 2

8

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

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

于 2020-02-21T01:15:45.330 回答
5

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

LocalVariableType:
    UnannType
    var

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

所以不,var<Integer>无效的。

于 2020-05-06T15:43:29.570 回答