2012-01-16 22 views
1

次の文は、Eclipseでの警告の原因:ベストプラクティス:型の安全警告を処理するにはどうすればよいですか?

Map<String, String> options = DefaultCodeFormatterConstants.getEclipseDefaultSettings(); 

警告:

Type safety: The expression of type Map needs unchecked conversion to conform to Map<String,String> 

この警告を処理するためのベストプラクティスは何ですか? SupressWarning( "未チェック")アノテーションを追加する必要がありますか?全体のクラスのために?それとも方法だけ?それとも私は警告を無視するべきですか?または、この警告をどうやって取り除くことができますか?

答えて

9

DefaultCodeFormatterConstants.getEclipseDefaultSettingsまでは適切に生成されていますが、内部ラッパーを生成し、その内部の内部変数宣言の注釈を持つことを検討したいと思います。注釈が「安全」である理由を説明するコメントも含めます。

通常、SuppressWarningsアノテーションのスコープを可能な限り小さくし、可能な限り少ないものにしたいとします。また、毎回あなたの推論を説明するコメントが必要です。

+0

+1これは非常に合理的です。 – user949300

2

永久に「取り除く」ための唯一の方法は、パラメータ化されたマップを返すJava 5以降のバージョンのAPIにアップグレードすることです。

'クリーンアップ'の並べ替えを行う最も簡単な方法は、自分のクラスでRAWタイプを返すメソッドをラップし、そこでキャストを実行し、チェックされていない警告を抑制する方法です。この方法では、少なくとも1つの場所で行われ、誤って「本物の」警告が表示されない場所には@SuppressWarningsを使用していません。

1

宣言のこれらの警告は、行が非常に迷惑であることがわかりました。無意味なことに、内部が深く、タイプ消去があることを知っています。コンパイラは何も言わずに不平を言っています。だから私はそれらを無視する。しかし、これはベストプラクティスではないかもしれません。 Java 7では、IIRCのいくつかの改良が行われました。

List<String> = new ArrayList<>(); 

「弦」の冗長な入力を省き、警告を回避します。

注 - 私は、宣言行にではなく、でない警告に注意します。

1

メソッドが生のマップを返す場合は、マップが実際にMap<String, String>であることを(ドキュメントまたはコードから)確認し、警告を無視することだけができます。コンパイラは、返されたMapがMap<String, String>であることを確認する方法を持っていません。

最小の可能な範囲で警告を無視する必要があります。そうでないと、コンパイラからの警告なしに他の安全でないコードを追加することができます。

+0

型の消去のために、そのようなものがない場合、それがMap であることをどのように伝えることができますか?あなたが確認することができるのは、それが地図であり、これははるかに異なる警告/エラーメッセージであるということです! p.s.これは主に宣言行に適用されます - 私の答えも見てください。 – user949300

+1

解答の中で述べたように、文書またはコードから。たとえば、ドキュメンテーションに「返されたマップに文字列がキーと値として含まれています」と記載されている場合、またはメソッドのコードによって文字列のみが使用されていることが明らかになった場合 –

+0

私は、ドキュメントが "文字列のみ"と言っているクラスや、コードが実際に型をチェックする場所については多くのクラスを見ていません。あなたが頻繁に使用する例はありますか?私たちはさまざまなサークルで走っていると思います。私はジェネリックを事前定義するクラスを見てきました。ユーザーはそれらを変更することはできません。また、Fooを拡張する必要があります。 – user949300

関連する問題