8

最近、JDK1.6からJDK1.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

タイプパラメータを追加すると、最初の警告が表示されます(冗長仕様...)

何が起きてんだ?

両方の警告を保持したいのですが、まだEclipse3.7.1を使用しています。この問題を解決する別の方法がある場合は、Eclipseを更新するつもりはありません。これは、Eclipseを再度希望する方法で構成するのに時間がかかるためです。

4

1 に答える 1

5

型引数の冗長指定<SomeType>

Java7の型推論メカニズムに由来します。ジェネリック型を2回指定することは、コンパイラーが必要なものを単純に直感的に理解できるため、確かに冗長です。

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

その結果、宣言と定義の両方でジェネリック型は必要ありません(型推論さらに進む可能性があります。たとえば、ScalaではLHSをvalまたはとして宣言するだけvarで、コンパイラーは実際に必要な型を認識します)。

于 2013-02-12T09:45:34.887 に答える