8

我最近刚从 JDK1.6 切换到 JDK 1.7。

我有这个代码:

SomeClass<SomeType> someVariable = new SomeClass<SomeType>(createSomeObject());

现在我收到警告:

Redundant specification of type arguments <SomeType>

如果我使用快速修复 Eclipse 会给我这个:

SomeClass<SomeType> someVariable = new SomeClass<>(createSomeObject());

这导致

Got an exception - expecting EOF, found 'xyz'

xyz 是我的代码文本中的下一项。

当我删除尖括号时,我收到以下警告:

SomeClass is a raw type. References to generic type SomeClass<M> should be parameterized

如果我添加类型参数,我最终会收到第一个警告(冗余规范......)

WTF正在进行吗?

我想保留这两个警告,我仍在使用 Eclipse 3.7.1。如果有另一种方法可以解决这个问题,我不愿意更新我的 Eclipse,因为我需要一些时间来按照我想要的方式再次配置它。

4

1 回答 1

5

类型参数的冗余规范<SomeType>

来自 Java 7 的类型推断机制。两次指定泛型类型确实是多余的,因为编译器可以简单地从

SomeClass<SomeType> someVariable = new SomeClass<>(createSomeObject());

因此,您在声明和定义中都不需要泛型类型(类型推断可以走得更远 - 例如,使用 Scala 您只需将 LHS 声明为valor var,编译器就知道它真正需要的类型)。

于 2013-02-12T09:45:34.887 回答