5

いくつかのPMDルールが互いに競合していることに気付くことがあります。そのため、すべてのPMDルールを満たすコードを記述できない場合があります。

たとえば、次の2つのルールは互いに除外しているようです。「オブジェクトをnullに割り当てることは、コードの臭いです。リファクタリングを検討してください。」および「メソッドには1つの出口点のみが必要であり、それがメソッドの最後のステートメントである必要があります」

以下は私のサンプルコードです。

ここに画像の説明を入力してください

get1()を使用すると、前者のルールに違反し、get2()を使用すると、後者のルールに違反します。メソッドには出口点が1つしかないほうがいいのですが、PMDが「オブジェクトをnullに割り当てるのはコードの臭いです」と報告したくないのですが、誰か良い考えはありますか?どうもありがとう :)

4

3 に答える 3

8

どちらの場合でも、条件演算子を使用します。

return condition > 5 ? Integer.valueof(123) : null;

個人的には、1 つの出口点に固執しようとはしません。コードが読みにくくなる場合が非常に多くあります - 多くの場合、メソッドの開始時に戻り値がどうあるべきかを伝えることができます (たとえば、基本ケースであるため)。独断的に「1 つの出口点のみ」に固執するコードは、通常、不必要にネストされたコードになってしまい、それを精査するのが難しくなります。

于 2012-05-09T09:17:46.267 に答える
1

使用する

return (condition > 5) ? Integer.valueOf(123) : null;

しかし、それが「コードの匂い」かどうかはわかりません... :)

于 2012-05-09T09:21:53.773 に答える