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>
无效。
我的一个朋友注意到
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>
无效。