私は@SuppressWarnings("unchecked")
、@SuppressWarnings("null")
ほとんどの場合上記の方法を使用して、警告なしでコードをコンパイルできるようにしていますが、疑問があります。このStackoverflowの質問が見つかりました。ジョン・スキートが興味深い答えを書いてくれました。
彼によると、
時々、Javaジェネリックスはあなたがやりたいことをさせないだけで、あなたがしていることが本当に実行時に合法であることをコンパイラに効果的に伝える必要があります。
しかし、例外がスローされる可能性がある場合はどうでしょうか?警告を抑制するのは悪い考えではありませんか?問題が表面化する可能性のある場所を意識する必要はありませんか?
また、誰かが後で私のコードを変更し、SuppressWarningsを削除せずに疑わしい機能を追加した場合はどうなりますか?それをどのように回避できますか、および/またはこれに他の代替手段はありますか?
私が使用してしなければならない@SuppressWarnings("unchecked")
と@SuppressWarnings("null")
?
アップデート#1
未チェックの型キャストに関する限り、この回答(以下のコメントで@gnatが指摘)によると、これらの警告を抑制することが必要です。
安全でない型キャストの必要性を排除するために、多くの不可欠なJavaライブラリが更新されたことはありません。これらの警告を抑制することは、他のより重要な警告に気づき修正するために必要です。
他の警告を抑制する場合は、まだ少し灰色の領域にあります。
アップデート#2
あたりとして、Oracleのドキュメント(以下もいくつかの回答で述べました):
スタイルの問題として、プログラマーは常に、このアノテーションが最も効果的な場所で最も深くネストされた要素に使用する必要があります。特定のメソッドで警告を抑制したい場合は、クラスではなくそのメソッドに注釈を付ける必要があります。