var<;T>;你喜欢Java吗?

var<;T>;你喜欢Java吗?,java,generics,var,ecj,Java,Generics,Var,Ecj,我的一个朋友注意到了 var list=new ArrayList(); 在Java中是有效的。结果是,list的类型被计算为ArrayList 使用var list=new ArrayList()时,列表只是数组列表 我们两人都没有弄清楚,var的泛型是什么,因为它似乎被忽略了。但是如果是这样,为什么这在语法上是正确的呢?事实证明,var的使用只允许在带有JDT核心的Eclipse中使用,javac不接受这一点。因此,我假设这是Eclipse中的一个bug 编辑:正如@MC-emperon所

我的一个朋友注意到了

var list=new ArrayList();
在Java中是有效的。结果是,
list
的类型被计算为
ArrayList

使用
var list=new ArrayList()时
列表
只是
数组列表


我们两人都没有弄清楚,
var
的泛型是什么,因为它似乎被忽略了。但是如果是这样,为什么这在语法上是正确的呢?

事实证明,
var
的使用只允许在带有JDT核心的Eclipse中使用,javac不接受这一点。因此,我假设这是Eclipse中的一个bug


编辑:正如@MC-emperon所显示的,这绝对是一个bug。我已将此bug添加到Eclipse Bugzilla中。

这确实是一个bug,但证据在于:

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


因此,不,
var
无效的。

Java10说
Main.Java:5:error:非法引用受限类型“var”var list=new Java.util.ArrayList()
@ggorlen我们最初在Eclipse上尝试了这个方法,在Eclipse上这确实是一个非常有效的程序。作为对您评论的回应,我刚刚用javac尝试过,这确实是不正确的。@ggorlen AFAIK,它没有,因为它使用了自定义编译器。好吧,至少这在Eclipse中是有效的,如果您愿意,您可以自己尝试一下。:-)@啊,我看你是对的。我不使用Eclipse,所以我学到了一些新东西。我想我会编辑这篇文章,然后提到这是特定于ECJ.Bugzilla条目的:
LocalVariableType:
    UnannType
    var