web-dev-qa-db-ja.com

Java 6:サポートされていない@SuppressWarnings( "rawtypes")警告

最新のSunのJavaコンパイラを搭載した新しいマシンに移動し、既存のJava 6コードに警告が表示されました。割り当て:

@SuppressWarnings("rawtypes")

例えば:

class Foo<T> {
...
}
...
@SuppressWarnings("rawtypes")
Foo foo = new Foo();

古いコンパイラ(JDK 1.6.0_20)を使用してマシンに戻ったときに、この古いコンパイラが「rawtypes」警告の抑制について警告していることに気づきました。 (「未チェック」)。また、最新のコンパイラがデフォルトで「未チェック」と「rawtypes」の両方を配置する場所がいくつかありました。古いコンパイラでコードをコンパイルすると同じ警告が再現されます。

どちらのコンパイラも警告を生成しないように、2つの間に下位/上位互換性を強制するにはどうすればよいですか

41
eold

Eclipseコンパイラとjavacの両方でサポートされている@SuppressWarnings("unchecked")を使用できます。

ただし、コンパイラが_@SuppressWarnings_注釈を使用し、独自の値を使用できることに注意してください。 JLSは、コンパイラーに「未チェック」および「非推奨」の値(現時点では)を理解させるだけです。

コンパイラベンダーは、サポートする警告名をこの注釈タイプと併せて文書化する必要があります。 同じ名前が複数のコンパイラで機能するように協力することをお勧めします

Heliosを使用する場合は、@SuppressWarnings("unchecked")ではなく@SuppressWarnings("rawtypes")を許可する特定のオプションを設定する必要があります。

新しいトークンでコードを更新できない場合は、Eclipseの起動時に_suppressRawWhenUnchecked=true_システムプロパティを設定できます。


リソース:


編集:これは、元々 Alex Miller によって書かれた、参照として使用された現在利用できないknolの記事です。

Javaの@SuppressWarningsアノテーション

さまざまな警告を抑制するための標準注釈

SuppressWarnings注釈は、Java SE 5の標準注釈として追加されました。

定義

@ SuppressWarnings アノテーションは、Java言語仕様 セクション9.6.1.5 で定義されています。

注釈タイプSuppressWarningsは、Javaコンパイラーによって発行される警告のプログラマーによる制御をサポートします。これは、Stringの配列である単一の要素を含みます。宣言に注釈@SuppressWarnings(value = {S1, ... , Sk})が付けられている場合、Javaコンパイラーは、S1、...、Skのいずれかによって識別される警告を生成してはなりません。注釈付き宣言またはその一部の結果として。

チェックされていない警告は、文字列「unchecked」で識別されます。

後続の_@Deprecation_の section では、@SuppressWarnings("deprecation")を使用してこれらの警告を抑制できることにも言及しています。

有効な警告タイプ

仕様自体に記載されている2つの警告文字列は、「未チェック」と「非推奨」のみです。ただし、Sun JDKはコンパイラでより多くの文字列セットを使用します。現在のセットを確認するには、次を実行します。

_javac -X
_

(特に)-Xlintの有効な設定が表示されます。

たとえば、Sun JDK 1.5は次を示します。

  • all-このコードからのすべての警告を抑制する
  • 非推奨-非推奨コードの使用による警告を抑制する
  • unchecked-未チェックの呼び出しまたは未チェックのキャストからの警告を抑制します
  • fallthrough-有効なケースを見つけずにスイッチがフォールスルーした場合の警告を抑制します(デフォルトはありません)
  • 道 -
  • serial-SerializableクラスがserialVersionUIDを定義しない場合、警告を抑制します
  • finally-finally内での戻りからの警告を抑制します(tryで戻りを無視します)

Sun JDK 1.6は次を追加します。

  • キャスト
  • divzero-ゼロによる整数除算が検出された場合、警告を抑制します
  • 空の
  • オーバーライド
  • none

IDEおよび静的分析ツールは、通常、@ SuppressWarningsで使用可能な他の多数の値をサポートしています。これらの値は、IDEによって実行される特定の静的分析チェックに対応しています。

日食

Eclipse 3.3のEclipse警告値は JDTのドキュメントに記載されています です。

  • all-すべての警告を抑制する
  • boxing-boxing/unboxing操作に関連する警告を抑制します
  • cast-キャスト操作に関連する警告を抑制します
  • dep-ann-非推奨の注釈に関連する警告を抑制する
  • 非推奨-非推奨に関連する警告を抑制する
  • fallthrough-switchステートメントの欠落しているブレークに関連する警告を抑制します
  • finally-返されないfinallyブロックに関連する警告を抑制する
  • 非表示-変数を非表示にするローカルに関連する警告を抑制します
  • incomplete-switch-switchステートメントの欠落エントリに関連する警告を抑制します(enum case)
  • nls-非nls文字列リテラルに関連する警告を抑制します
  • null-null分析に関連する警告を抑制
  • 制限-推奨されない参照または禁止された参照の使用に関する警告を抑制します
  • serial-シリアライズ可能なクラスのserialVersionUIDフィールドの欠落に関する警告を抑制します
  • static-access-誤った静的アクセスに関する警告を抑制します
  • 合成アクセス-内部クラスからの最適化されていないアクセスに関連する警告を抑制します
  • unchecked-未チェックの操作に関連する警告を抑制します
  • unqualified-field-access-未修飾のフィールドアクセスに関連する警告を抑制します
  • 未使用-未使用コードに関連する警告を抑制します

IntelliJ

NetBeans

単一の警告を指定する例:

_@SuppressWarnings("unchecked")
public void methodWithScaryWarnings() {
    List rawList = new ArrayList();
    List<String> stringList = (List<String>)rawList;
}
_

2つの警告の使用例:

_@SuppressWarnings({"unchecked","deprecation"})
public void methodWithScaryWarnings() {
    callDeprecatedMethod();
}
_
43
Colin Hebert

Eclipse 3.5はrawtypeを認識せず、警告にフラグを立てて未チェックに切り替えることに注意してください。 Eclipseが、解決するよりも多くの問題を引き起こすrawtypesアノテーションを思いついたことにイライラしています。彼らはちょうど標準的なものに固執する必要がありました。

4
inder