18

PMDを使用してコードを分析していますが、修正方法がわからない優先度の高い警告がいくつか生成されます。

1)Avoid if(x!=y)..; else...;しかし、このロジックが必要な場合はどうすればよいですか?つまり、私はチェックする必要がありx!=yますか?どうすればリファクタリングできますか?

2)Use explicit scoping instead of the default package private level.しかし、クラスは実際にはパッケージ内でのみ使用されます。どのアクセス修飾子を使用する必要がありますか?

3)Parameter is not assigned and could be declared final.PMDがこの警告で指摘したすべての場所にfinalキーワードを追加する必要がありますか?

4

5 に答える 5

33

否定を避ける:if( x!=y ) doThis() else doThat()人/人間は否定よりも肯定的なものを好む傾向があるため、代わりに、最初に肯定的なケースを確認します。それは、ソースコードを読むときに頭の中で論理を逆転させなければならないという頭脳をひねります。代わりに、次のように記述します。

 if ( x!=y ) doThis() else doThat()       // Bad - negation first
 if ( x==y ) doThat() else doThis()       // Good - positive first

明示的なスコープ:PMD Webサイトによると、これは物議を醸すルールです。あなたはそれを嫌うかもしれません、他の誰かがそれを好きです。あなたがすべきことは、クラス内のすべてのフィールドをプライベートにすることです。パッケージの可視性を備えたフィールドまたはメソッド(クラスではない)があるようです。たとえば、次のようになります。

 class Foo {
   /* private missing */ Object bar;
 }

最終パラメータ:メソッドパラメータは、誤って再割り当てされないように最終的なものにする必要があります。それは良い習慣です。Eclipseを使用している場合、コンテンツアシストは、「可能な場合は修飾子をfinalに変更する」と呼ばれるクイックフィックスも提供します。Ctrl-aを使用してエディターですべてのコードを選択し、Ctrl-1を押すだけです。

于 2011-01-04T23:36:02.957 に答える
6

すべてのルールを有効にする必要はありません。同意するルールをいくつか選択し、すべての警告がクリアされるまでコードをリファクタリングします。

1-if (x == y) ... else ...ロジックにリファクタリングします。ifステートメントで否定的な条件を回避するだけで、コードが理解しにくくなります

2-私はそのルールを有効にしません。

3-多くの人が多くのフィールドと変数を最終的に宣言します。特に、変数の値がメソッドで変更されないことを確認または表現したい場合。それが気に入らない場合は、そのルールを無効にしてください。

于 2011-01-04T23:35:24.563 に答える
4

これらはすべて、オフにできるマイナーな警告のようです。

1)ロジックを反転させてほしい

if(x==y) {
    //old else clause
} else {
    //old if clause
}

2)パッケージが本当に必要な正しいアクセスである場合、追加するアクセス修飾子はありません。その特定の警告を抑制する方法があるかどうかを知るのに十分な知識がありません。

3)スタイルの問題。一部の人々は、それがあり得るすべてのものについて最終的なものを望んでいます。他の人は、それが少しの情報にあまりにも多くの混乱を加えると考えています。後者のキャンプにいる場合は、その警告をオフにしてください。

于 2011-01-04T23:33:49.493 に答える
4

最初の項目(不等式)に関しては、2つの問題があります。

1)二重否定の読みやすさ。

あなたが持っていると言う:

if(x!=y) { false clause } else { true clause }

2番目の句は、「xがyと等しくない」場合に実行されます。

これは次のように書き直すことができます。

if (x==y) {true clause } else {false clause}.

2)正しさ:xとyがプリミティブでない場合は、使用するif(!x.equals(y))方が安全です。これは、.equals()の代わりに==を使用するのと同じであり、非常に深刻なバグにつながる可能性があります。

于 2011-01-04T23:34:27.887 に答える
1

// NOPMDPMDルールをチェックしたくない行の最後で使用することもできます。

たとえば、上記のコードの場合、次のように指定することでPMDチェックを抑制することができます。

class Foo {
   /* private missing */ Object bar; // NOPMD
 }

上記のコメントは、同じ行の他の警告を黙って抑制する可能性があることに注意してください。

于 2012-06-03T10:05:48.977 に答える