Javaで有効な@SuppressWarnings警告名のリストは何ですか?


264

@SuppressWarningsJava で有効な警告名のリストは何ですか?

間で来るビット("")の中で@SuppressWarnings("")


3
この質問は本当に素晴らしく、答えは役に立ちます。JCPの誰かがそれを見る場合、抑制警告を追加することがいかに厄介であるかを理解する必要があります。大文字小文字の区別はありません。ハイフン、ラクダの大文字小文字は区別されません。これを単純化すると、これを標準化することができます。
Snicolas

私は"ProhibitedExceptionDeclared"Eclipseコレクションフレームワーク(org.eclipse.collections.impl.block.function.checked.ThrowingFunction)内に表示されますが、以下にはリストされていません。
kevinarpe 2017

回答:


250

IDEまたはコンパイラによって異なります。

Eclipse Galileoのリストは次のとおりです。

  • すべての警告を抑制する
  • ボックス化 /ボックス化解除操作に関連する警告を抑制するボックス化
  • キャスト操作に関連する警告を抑制するキャスト
  • dep-annにより、非推奨のアノテーションに関連する警告を抑制
  • 非推奨に関する警告を抑制する非推奨
  • フォールスルーにより、switchステートメントに欠落しているブレークに関する警告を抑制
  • 最後に、返されないfinallyブロックに関連する警告を抑制する
  • 隠れ非表示変数という地元の人々に対する抑制警告に
  • incomplete-switchは、switchステートメント(列挙型の場合)の欠落したエントリに関連する警告を抑制します
  • NLS非NLS文字列リテラルに対する抑制の警告へ
  • null分析に関連する警告を抑制するにはnull
  • 推奨されないまたは禁止されている参照の使用に関連する警告を抑制する制限
  • serialは、シリアライズ可能なクラスのserialVersionUIDフィールドがないことに関連する警告を抑制します
  • スタティックアクセス間違った静的なアクセスに対する抑止警告へ
  • 内部クラスからの最適化されていないアクセスに関連する警告を抑制する合成アクセス
  • オフにすると、チェックされていない操作に関連する警告が抑制されます
  • unqualified-field-accessは、フィールドアクセス非修飾に関する警告を抑制します
  • 使用のコードに関連する警告を抑制するには、unused

Indigoのリストの追加:

  • javadoc警告に関連する警告を抑制するjavadoc
  • rawtypesは、raw型の使用に関する警告を抑制します
  • staticとして宣言できるメソッドに関連する警告を抑制するstatic-method
  • superを呼び出さずにメソッドをオーバーライドすることに関する警告を抑制する

Junoのリストに追加:

  • リソースタイプ閉鎖可能のリソースの使用に対する抑制の警告へ
  • sync-overrideは、同期されたメソッドをオーバーライドするときに同期が欠落しているために警告を抑制します。

KeplerとLunaは、Juno(list)と同じトークンリストを使用します。

他は同様ですが異なります。


nullの警告を抑制することはどのような場合に有効ですか?
Jesse Jashinsky、2012年

@Jesse:コンパイラが間違っている場合(つまり、「「愚かなフランダース」の警告」)。コンパイルしてみてくださいvoid foo( Object o ) { boolean b; if ( ( b = o == null ) ) o = new Object(); o.toString(); }。一部の環境(例:NetBeans 7.3 w / Java 6 JDK [1.6.0_41])は、その時点でnullにできない場合でも"o possibly null"o.toString()呼び出し時に生成されoます。
パー

2
@cletus:Eclipseに警告のタイプを追加することは可能ですか?問題は、チームメンバーの1人がIntelliJを使用しており、IDEがEclipseで警告を発する他の抑制警告タイプを持っていることです。EclipseIndigoでは、設定で設定できます。 ...
KC

semicolonルナで動作していないようですか?:(誰かsemicolonが本当に有効であるかどうかを誰かが確認できますか?
Kissaki '11

「非最終フィールドでの同期」警告を抑制するための値は何ですか?
matteo 2014年

48

すべての値が許可されます(認識されない値は無視されます)。認識されるもののリストはコンパイラ固有です。

ではJavaのチュートリアル uncheckeddeprecationJava言語仕様で必要とされる2つの警告としてリストされているので、彼らはすべてのコンパイラで有効である必要があります。

すべてのコンパイラ警告はカテゴリに属しています。Java言語仕様には、非推奨と未チェックの2つのカテゴリがリストされています。

Java言語仕様の中で定義されている特定のセクションは、バージョン間で一貫していません。Java SE 8仕様uncheckeddeprecationは、セクション9.6.4.5にコンパイラの警告として記載されています@SuppressWarningsおよび9.6.4.6 @Deprecated

Sunのコンパイラの場合、実行javac -Xすると、そのバージョンで認識されるすべての値のリストが表示されます。1.5.0_17の場合、リストは次のようになります。

  • すべて
  • 非推奨
  • 未チェック
  • フォールスルー
  • シリアル
  • 最後に

43

リストはコンパイラ固有です。しかし、Eclipseでサポートされている値は次のとおりです。

  • allDeprecation 廃止されたコード内でも廃止
  • alljavadocが 無効であるか、javadocがありません
  • assertIdentifier 識別子として使用されるアサートの発生
  • ボクシング オートボクシング変換
  • char配列が明示的に文字列に変換されずに文字列連結で使用される場合の charConcat
  • conditionAssign 可能偶発ブール割り当て
  • コンストラク ター名を持つコンストラクター名メソッド
  • dep-annに @Deprecatedアノテーションがありません
  • 推奨のコードまたは非推奨のコード外のメンバーの非推奨の使用法
  • 推奨され ないアクセスルールに一致するタイプの推奨されない使用
  • emptyBlock 文書化されていない空のブロック
  • enumSwitch不完全なスイッチ 不完全な列挙スイッチ
  • フォールスルーの 可能性があるフォールスルーケース
  • fieldHiding 別の変数を隠すフィールド
  • 最終境界を持つfinalBound型パラメーター
  • 最後に 最後にブロックが正常に完了しない
  • 禁止さ れたアクセスルールに一致するタイプの禁止された使用
  • 隠れ fieldHiding、localHiding、typeHidingとmaskedCatchBlockのためのマクロ
  • indirectStatic 静的メンバーへの間接参照
  • スーパーインターフェースとして使用されるintfAnnotationアノテーションタイプ
  • intfNonInherited インターフェイスの非継承メソッドの互換性
  • javadocが 無効なjavadoc
  • localHiding 別の変数を隠すローカル変数
  • maskedCatchBlocks 非表示のキャッチブロック
  • nls 非nls文字列リテラル(タグの欠落// $ NON-NLS-)
  • noEffectAssign 割り当て、効果なし
  • nullの 潜在的な欠落または冗長nullチェック
  • nullDereferenceに nullチェックがありません
  • オーバーアン 不足の@Overrideアノテーション
  • パラメータへのparamAssignの割り当て
  • pkgDefaultMethod がpackage-defaultメソッドをオーバーライドしようとする
  • (パラメーター化されたタイプの代わりに)rawタイプのraw使用法
  • セミコロン 不要のセミコロンまたは空のステートメント
  • シリアルが ないserialVersionUID
  • specialParamHiding コンストラクターまたは別のフィールドを非表示にするセッターパラメーター
  • indirectStaticおよびstaticReceiverの静的アクセスマクロ
  • staticReceiver- 非静的レシーバーを使用して静的フィールドを取得するか、静的メソッドを呼び出す場合
  • スーパー 呼び出しを行わずにメソッドをスーパーオーバーライドする
  • 抑制 @SuppressWarningsを有効にします
  • innerAccess 、synthetic- access、innerclassの合成アクセスを実行する場合
  • タスク はソースコードのタスクタグのサポートを有効にします
  • typeHiding 別の型を隠す型パラメーター
  • チェックチェックタイプの操作
  • invalidElse不要 なelse句
  • unqualified-field-access、unqualifiedField unqualified reference to field
  • unusedArgument、unusedImport、unusedLabel、unusedLocal、unusedPrivate、unusedThrownの未使用マクロ
  • unusedArgument 未使用のメソッド引数
  • unusedImport 未使用のインポート参照
  • unusedLabel 未使用のラベル
  • unusedLocal 未使用のローカル変数
  • unusedPrivate 未使用のプライベートメンバー宣言
  • unusedThrown 未使用の宣言されたスローされた例外
  • uselessTypeCheck 不要なキャスト/インスタンスの操作
  • varargsCast varargs引数には明示的なキャストが必要です
  • warningToken @SuppressWarningsの 未処理の警告トークン

Sun JDK(1.6)には、サポートされている警告の短いリストがあります。

  • deprecation 減価償却済みアイテムの使用を確認します。
  • unchecked Java言語仕様で義務付けられているチェックされていない変換警告の詳細を提供します。
  • シリアル化可能なクラスに欠落しているserialVersionUID定義について警告します。
  • 最終的に正常に完了できない句について最終的に警告します。
  • フォールスルーフォールスルーのケースがないかスイッチブロックを確認し、見つかった場合は警告メッセージを表示します。
  • path 環境パス(クラスパスなど)に存在しないパスを確認します。

Macで利用可能な最新のjavac(1.6.0_13)では、次の警告がサポートされています

  • すべて
  • キャスト
  • 非推奨
  • divzero
  • 空の
  • 未チェック
  • フォールスルー
  • シリアル
  • 最後に
  • オーバーライド

ここでのEclipseリストは、SuppressWarningアノテーションではなく、コンパイラフラグを参照します(リンクしたドキュメントの最後の部分を確認してください)。
ロンタフィン、2009

3
彼らは両方です。コンパイラー・フラグを設定することにより、コンパイラーにどのような警告が必要かを伝えます。注釈を使用すると、コードの特定の場所でこれらの警告を抑制することができます。
D. Wroblewski、2009

リストはEclipseの方が短いと思います。SupressWarningsために利用可能なトークンのリストが明示され、最新のガリレオのドキュメントを参照してください。help.eclipse.org/galileo/index.jsp?topic=/...
ピーターŠtibraný

2
私はEclipse 3.5で@SuppressWarnings( "raw")を試しましたが、機能しません-「raw」はこのアノテーションの有効な値ではないという警告が表示されます。
Jesper、

私も。jspサポートはJavaサポートほどフラッシュアウトされないことをUnfortunatelは説明します。
stu

9

私にとって新しいお気に入りは@SuppressWarnings("WeakerAccess")IntelliJです。これにより、使用しているよりも弱いアクセス修飾子を使用する必要があると考えられたときに不満が出なくなります。テストをサポートするには、いくつかのメソッドへのパブリックアクセスが必要であり、@VisibleForTestingアノテーションは警告を防止しません。

ETA:「匿名」が、@ MattCampbellにリンクされているページで、次の非常に役立つメモにコメントしました:

説明する目的でこのリストを使用する必要はありません。IntelliJは、必要に応じてこれらのSuppressWarningsを自動的に追加します。私が覚えている限り多くのリリースでこれを行うことができました。

警告が表示されている場所に移動し、Alt-Enterキーを押します(または、検査リストに表示されている場合はそれを選択します)。メニューが表示されたら、警告を表示してそれを修正するように提案します(たとえば、警告が「メソッドが静的である可能性がある場合、「静的にする」はIntellJが修正を提案するものです)を選択する代わりに、右矢印ボタンを使用してサブメニューにアクセスするだけで、「検査プロファイル設定の編集」などのオプションが表示されます。このリストの下部には、「クラスのすべての検査を抑制する」、「クラスの抑制」、「メソッドの抑制」、および「ステートメントの抑制」などのオプションがあります。あなたはおそらくこれらのうちのどれがリストの最後に現れるかを望みます。これらのいずれかを選択すると、コードに@SuppressWarnings注釈(または場合によってはコメント)が追加され、問題の警告が抑制されます。IntelliJは選択した警告に基づいて選択するため、どの注釈を追加するかを推測する必要はありません。


2

IntelliJで//noinspection自動生成できることに気付きました

  • @SuppressWarninigsステートメントの前に計画がまだないことを確認してください
  • 警告が選択されているときにAlt + Enter//noinspection押して特定のものを自動生成し、右矢印キーを使用して[ ...抑制 ]オプションを表示できるようになりました

IntelliJからの「スイッチのケースラベルが少なすぎます」という警告を抑制したかったのですが、IntelliJの@SuppressWarningサポートの完全なリストは見つかりませんでしたが、//noinspection私にとってはトリックでした。


@SuppressWarnings( "SwitchStatementWithTooFewBranches")を追加することもできます。
JPM

あいにくのために...を抑圧クリックALT + ENTERをオプションは、常に利用可能ではありません
flawyte

//noinspection SwitchStatementWithTooFewBranchesswitch仕事の前にも私にとって。
Oliver Hausler

1

そして、これははるかに完全なリストのようですが、他の場所では見つけられなかったAndroid-Studioに固有の警告がいくつか見つかりました(例:SynchronizeOnNonFinalField)

https://jazzy.id.au/2008/10/30/list_of_suppresswarnings_arguments.html

ああ、今、SOのガイドラインはSOの規制を妨害しています。一方では、リンクだけを提供するのではなく、リストをコピーすることになっています。しかし、その一方で、これは最大許容文字数を超えます。ですから、リンクが切れないことを望みます。


1

JSL 1.7

Oracleのドキュメントでは次のように述べています。

  • unchecked:チェックされていない警告は、「チェックされていない」という文字列で識別されます。
  • deprecation:次の場合を除いて、Javaコンパイラは、宣言にアノテーション@Deprecatedが付けられているタイプ、メソッド、フィールド、またはコンストラクターが使用される(つまり、名前でオーバーライド、呼び出される、または参照される)場合、非推奨警告を生成する必要があります。[...]注釈@SuppressWarnings( "deprecation");で警告を抑制するように注釈が付けられたエンティティ内で使用します。または

次に、実装が独自のものを追加して文書化できることを説明します。

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


1
それがunchecked規格によって承認されている唯一のものであるというのは真実ではありません。あなたが引用されたものから非常に次のセクションでは、「利用は注釈と警告を抑制するために注釈されたエンティティ内にあるときに非推奨の警告が生成されないと言う@SuppressWarnings("deprecation")
kbolino

1

IntelliJ抑制パラメーターのマスターリストがあることを追加したい:https : //gist.github.com/vegaasen/157fbc6dce8545b7f12c

かなり包括的に見えます。部分的:

Warning Description - Warning Name

"Magic character" MagicCharacter 
"Magic number" MagicNumber 
'Comparator.compare()' method does not use parameter ComparatorMethodParameterNotUsed 
'Connection.prepare*()' call with non-constant string JDBCPrepareStatementWithNonConstantString 
'Iterator.hasNext()' which calls 'next()' IteratorHasNextCallsIteratorNext 
'Iterator.next()' which can't throw 'NoSuchElementException' IteratorNextCanNotThrowNoSuchElementException 
'Statement.execute()' call with non-constant string JDBCExecuteWithNonConstantString 
'String.equals("")' StringEqualsEmptyString 
'StringBuffer' may be 'StringBuilder' (JDK 5.0 only) StringBufferMayBeStringBuilder 
'StringBuffer.toString()' in concatenation StringBufferToStringInConcatenation 
'assert' statement AssertStatement 
'assertEquals()' between objects of inconvertible types AssertEqualsBetweenInconvertibleTypes 
'await()' not in loop AwaitNotInLoop 
'await()' without corresponding 'signal()' AwaitWithoutCorrespondingSignal 
'break' statement BreakStatement 
'break' statement with label BreakStatementWithLabel 
'catch' generic class CatchGenericClass 
'clone()' does not call 'super.clone()' CloneDoesntCallSuperClone

1

SonarLintを使用している場合は、メソッドの上で試すか、イカ文字列全体をクラス化します。@SuppressWarnings( "squid:S1172")

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.