2

私は最近、もともとJava 1.3で書かれた大規模なレガシープロジェクトにソナーを導入しました。

生のコレクションなどを使用するコードをジェネリックを使用するように徐々に移行しています。ソナーで進行状況を追跡できればよいのですが、生のコレクションの使用を検出するためのすぐに使えるルールはないようです。

既存のソリューションはありますか? それとも、pmd/checkstyle でカスタム ルールを作成する必要がありますか?

4

3 に答える 3

1

ソナーでこれもキャッチしたいので、同じものを探していました。

List myList = new ArrayList();

Dennis S が言及しているルールは、次の状況をキャッチするためのものであるため、適用されません ( http://coding.tocea.com/java/gc_unchecked_type_in_generic_call/によると) 。

StringBuilder myText = new StringBuilder();
...
List<String> myList = new ArrayList<String>();
boolean containsMyText = myList.contains(someText);

collection.contains()型指定されたコレクションであっても、メソッドは Object パラメーターを受け取るため、コードはコンパイルされます。ただし、オブジェクトの型が正しくなく、型付きコレクションmyTextに追加できないため、これは無関係なチェックであり、常に false を返します。myList

私が見たところ、カスタム ルールを作成する必要があるようです。

于 2013-10-01T08:54:07.513 に答える
0

うーん、GC_UNCHECKED_TYPE_IN_GENERIC_CALL は非推奨になりました。推奨される代替品である S2175 は、オブジェクト型のメソッド (つまり、remove(Object)) が呼び出されているかどうかのみをチェックします。

したがって、GC_UNCHECKED_TYPE_IN_GENERIC_CALL も S2175 も、たとえば「HashMap x」ではなく「HashMap x」に対して警告を発行しないようです。

これにルールがないように見えるのは奇妙に思えます...

于 2016-06-06T23:36:10.977 に答える