Javaの有効な@SuppressWarnings
警告名のリストは何ですか?
@SuppressWarnings("")
の("")
の間にあるビット。
IDEまたはコンパイラに依存します。
Eclipse Galileoの リスト は次のとおりです。
- allすべての警告を抑制する
- boxingボクシング/アンボクシング操作に関連する警告を抑制する
- castキャスト操作に関連する警告を抑制する
- dep-ann廃止された注釈に関連する警告を抑制する
- deprecation廃止に関連する警告を抑制する
- fallthroughswitchステートメントの欠落しているブレークに関連する警告を抑制する
- finally返されないfinallyブロックに関連する警告を抑制する
- 非表示変数を非表示にするローカルに関連する警告を抑制する
- incomplete-switchswitchステートメントのエントリの欠落に関する警告を抑制します(enum case)
- nls非nls文字列リテラルに関連する警告を抑制する
- nullnull分析に関連する警告を抑制する
- restriction推奨または禁止された参照の使用に関連する警告を抑制する
- serialシリアル化可能クラスの欠落しているserialVersionUIDフィールドに関連する警告を抑制する
- static-access不正な静的アクセスに関連する警告を抑制する
- synthetic-access内部クラスからの最適化されていないアクセスに関連する警告を抑制する
- unchecked未チェックの操作に関連する警告を抑制する
- unqualified-field-access未修飾のフィールドアクセスに関連する警告を抑制する
- unused未使用コードに関連する警告を抑制する
リスト Indigo追加の場合:
- javadocjavadoc警告に関連する警告を抑制する
- rawtypesrawタイプの使用に関連する警告を抑制する
- static-methodstaticとして宣言できるメソッドに関連する警告を抑制する
- superスーパー呼び出しなしでメソッドをオーバーライドすることに関する警告を抑制する
リスト Junoの場合:
- resourceタイプがCloseableのリソースの使用に関する警告を抑制する
- sync-override同期メソッドをオーバーライドするときに同期が欠落しているために警告を抑制する
KeplerとLunaは、Junoと同じトークンリストを使用します( list )。
その他も同様ですが、異なります。
すべての値が許可されます(認識されない値は無視されます)。認識されるもののリストはコンパイラ固有です。
Javaチュートリアルunchecked
およびdeprecation
は、Java言語仕様で必要な2つの警告としてリストされているため、すべてのコンパイラで有効です。
コンパイラの警告はすべてカテゴリに属します。 Java言語仕様には、非推奨と未チェックの2つのカテゴリがリストされています。
The Java Language Specification 内の特定のセクションは、それらが定義されている場所でバージョン間で一貫性がありません。 Java SE 8仕様書unchecked
およびdeprecation
には、セクション9.6.4.5でコンパイラ警告としてリストされています。 @SuppressWarningsおよび9.6.4.6 @Deprecated。
Sunのコンパイラの場合、javac -X
を実行すると、そのバージョンで認識されるすべての値のリストが表示されます。 1.5.0_17の場合、リストは次のように表示されます。
リストはコンパイラ固有です。ただし、 Eclipse でサポートされている値は次のとおりです。
- allDeprecation非推奨コード内であっても非推奨
- allJavadocjavadocが無効または欠落しています
- assertIdentifier識別子として使用されるアサートの発生
- ボクシングオートボクシング変換
- charConcat文字配列が文字列に明示的に変換されずに文字列連結で使用される場合
- conditionAssign偶発的なブール代入の可能性
- constructorNameコンストラクター名のメソッド
- dep-ann@Deprecatedアノテーションがありません
- deprecation非推奨コードまたは非推奨コード外のメンバーの使用
- discouraged非推奨アクセスルールに一致するタイプの使用
- emptyBlock文書化されていない空のブロック
- enumSwitch、incomplete-switch不完全な列挙型スイッチ
- fallthrough考えられるフォールスルーケース
- fieldHiding別の変数を隠すフィールド
- finalBound最終バウンドの型パラメーター
- finally最終的にブロックが正常に完了しない
- forbidden禁止アクセスルールに一致するタイプの使用
- hidingfieldHiding、localHiding、typeHiding、maskedCatchBlockのマクロ
- indirectStatic静的メンバーへの間接参照
- intfAnnotationスーパーインターフェースとして使用される注釈タイプ
- intfNonInheritedインターフェイスの非継承メソッドの互換性
- javadoc無効なjavadoc
- localHiding別の変数を隠すローカル変数
- maskedCatchBlockshidden catchブロック
- nls非nls文字列リテラル(タグの欠落// $ NON-NLS-)
- noEffectAssign効果のない割り当て
- null潜在的な欠落または冗長なnullチェック
- nullDereferencenullチェックがありません
- over-ann@Overrideアノテーションがありません
- paramAssignパラメーターへの割り当て
- pkgDefaultMethodpackage-defaultメソッドをオーバーライドしようとする
- rawraw型の使用a(パラメータ化された型の代わりに)
- semicolon不要なセミコロンまたは空のステートメント
- serialserialVersionUIDがありません
- specialParamHiding別のフィールドを非表示にするコンストラクターまたはセッターパラメーター
- static-accessindirectStaticおよびstaticReceiverのマクロ
- staticReceiver静的フィールドの取得または静的メソッドの呼び出しに非静的レシーバーが使用される場合
- superスーパー呼び出しを行わずにメソッドをオーバーライドする
- suppress@SuppressWarningsを有効にする
- syntheticAccess、synthetic-accessインナークラスの合成アクセスを実行する場合
- tasksソースコードでタスクタグのサポートを有効にする
- typeHiding別の型を隠す型パラメーター
- unchecked未チェックのタイプ操作
- unnecessaryElse不要なelse句
- unqualified-field-access、unqualifiedFieldフィールドへの非修飾参照
- unusedunusedArgument、unusedImport、unusedLabel、unusedLocal、unusedPrivate、unusedThrownのマクロ
- unusedArgument未使用のメソッド引数
- unusedImport未使用のインポート参照
- unusedLabel未使用ラベル
- unusedLocal未使用のローカル変数
- unusedPrivate未使用のプライベートメンバー宣言
- unusedThrown未使用の宣言された例外
- uselessTypeCheck不要なcast/instanceof操作
- varargsCastvarargs引数には明示的なキャストが必要
- warningToken@SuppressWarningsの未処理の警告トークン
Sun JDK(1.6)には、サポートされている警告のより短い list があります。
- deprecation減価償却項目の使用を確認します。
- uncheckedJava言語仕様で義務付けられている未チェックの変換警告の詳細を提供します。
- serial直列化可能クラスでのserialVersionUID定義の欠落について警告します。
- finally正常に完了できないfinally節について警告します。
- fallthroughフォールスルーケースのスイッチブロックを確認し、検出された場合は警告メッセージを提供します。
- path環境パス(クラスパスなど)に存在しないパスを確認します。
Mac用の最新のjavac(1.6.0_13)には、次の警告がサポートされています
- all
- cast
- 非推奨
- divzero
- empty
- 未チェック
- フォールスルー
- パス
- serial
- 最終的に
- オーバーライド
私にとって新しいお気に入りは、IntelliJの@SuppressWarnings("WeakerAccess")
です。これにより、使用しているアクセス修飾子よりも弱いアクセス修飾子が必要だと判断されたときに文句を言わなくなります。テストをサポートするためにいくつかのメソッドへのパブリックアクセスが必要であり、@VisibleForTesting
アノテーションは警告を妨げません。
ETA:「匿名」は、@ MattCampbellにリンクされているページで、次の信じられないほど有用なコメントをコメントしました。
説明する目的でこのリストを使用する必要はありません。 IntelliJは、求められた場合、それらのSuppressWarningsを自動的に追加します。私が覚えている限り多くのリリースでこれを行うことができました。
警告がある場所に移動し、Alt-Enterを入力します(または、表示されている場合は[検査]リストで選択します)。メニューが表示されたら、警告を表示し、それを修正するように提案します(たとえば、警告が「メソッドは静的である可能性がある場合、「静的にする」は、IntellJによる修正の提案です)、代わりに「Enter」、右矢印ボタンを使用してサブメニューにアクセスします。サブメニューには「検査プロファイル設定の編集」などのオプションがあります。このリストの下部には、「クラスのすべての検査を非表示」、「クラスの非表示」、「メソッドの非表示」、および「ステートメントの非表示」などのオプションがあります。おそらく、リストの最後に表示されるこれらのいずれかが必要です。これらのいずれかを選択すると、問題の警告を抑制するコードに@SuppressWarningsアノテーション(または場合によってはコメント)が追加されます。 IntelliJは選択した警告に基づいて選択するため、追加する注釈を推測する必要はありません。
JSL 1.7
Oracleのドキュメント 言及:
unchecked
:チェックされていない警告は、文字列「unchecked」によって識別されます。deprecation
:@Deprecatedアノテーションが宣言されている型、メソッド、フィールド、またはコンストラクターが使用されている場合(つまり、名前でオーバーライド、呼び出し、または参照)、Javaコンパイラーは非推奨警告を生成する必要があります:...または次に、実装が独自に追加および文書化できることを説明します。
コンパイラベンダーは、サポートする警告名をこの注釈タイプと併せて文書化する必要があります。ベンダーは、複数のコンパイラで同じ名前が機能するように協力することをお勧めします。
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
そして、これははるかに完全なリストのようで、どこにも見つからないAndroid-Studio固有の警告がいくつか見つかりました(たとえば、SynchronizeOnNonFinalField)
https://jazzy.id.au/2008/10/30/list_of_suppresswarnings_arguments.html
ああ、今のSOのガイドラインはSOの制限に矛盾しています。一方では、リンクのみを提供するのではなく、リストをコピーすることになっています。しかし、一方で、これは文字の最大許容数を超えます。それでは、リンクが壊れないことを願っています。
//noinspection
はIntelliJで自動生成できることに気付きました
@SuppressWarninigs
がまだないことを確認してください//noinspection
を自動生成し、右矢印キーを使用して...オプションの抑制IntelliJからの「スイッチのケースラベルが少なすぎます」という警告を抑制したいときにここで終了しました。 IntelliJの@SuppressWarning
サポートの完全なリストは見つかりませんでしたが、//noinspection
は私のためにトリックをしました。
SonarLintを使用している場合は、メソッドまたはクラスの上でsquidの文字列全体を試してください:@SuppressWarnings( "squid:S1172")