質問
私は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がこの警告で指摘したすべての場所に最終キーワードを追加する必要がありますか?
解決
否定を避ける: それ以外の 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ウェブサイト, 、それは物議を醸すルールです。あなたはそれを嫌うかもしれません、他の誰かがそれを好きです。あなたがすべきことは、クラス内のすべてのフィールドをプライベートにすることです。パッケージの可視性を持つフィールドまたはメソッド(クラスではない)があるようです。たとえば、次のようなものです。
class Foo {
/* private missing */ Object bar;
}
最終パラメーター: 偶発的な再割り当てを避けるために、メソッドパラメーターが最終的でなければなりません。それはただの良い習慣です。 Eclipseを使用している場合、コンテンツアシストはQuickFixを提供します。 「可能な限り修飾子を最終的に変更する」. 。 EditorのすべてのコードをCTRL-Aで選択してから、CTRL-1を押します。
他のヒント
すべてのルールを有効にする必要はありません。同意するルールの一部を選択し、すべての警告がクリアされるまでコードをリファクタリングします。
1 - aにリファクタリングします if (x == y) ... else ...
論理。静的な場合のネガティブな条件を避けるだけで、彼らはコードを理解しにくくします
2 - 私はそのルールを有効にしません。
3 - 多くの人が多くのフィールドと変数を最終的に宣言します。特に、変数の値がメソッドで変更されないことを確認または表現したい場合。それが気に入らない場合は、そのルールを無効にしてください。
これらはすべて、オフになる可能性のある小さな警告のように見えます。
1)ロジックをひっくり返すことを望んでいます
if(x==y) {
//old else clause
} else {
//old if clause
}
2)パッケージが本当に正しいアクセスである場合、追加するアクセス修飾子はありません。その特定の警告を抑制する方法があるかどうかを知るのに十分な馴染みがありません。
3)スタイルの問題。一部の人々は、それができるすべてのものについて最終的なものを望んでいます。他の人は、それがほとんど情報にも混乱が多すぎると考えています。後者のキャンプにいる場合は、その警告をオフにします。
最初の項目(不平等)に関しては、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()の代わりに==を使用することに相当し、非常に深刻なバグにつながる可能性があります。
使用することもできます // NOPMD
PMDルールをチェックしたくない行の最後に。
たとえば、上記の指定されたコードの場合、PMDチェックを与えることで抑制できます。
class Foo {
/* private missing */ Object bar; // NOPMD
}
上記のコメントは、の他の警告を静かに抑制する可能性があることに注意してください 同じ ライン。