PMDを使用して、プロジェクトに関するコード品質レポートを生成しています。
NPathの複雑さの検査の結果がわかりません。
結果を表示する鈍いクラスを作成しました(これは実際のクラスではありませんが、同じパターンを使用しています)。
import java.util.*;
public class SOFExample {
private final Map<String, Date> magicMap = new HashMap<String, Date>();
protected static final long UNKNWOWN = 0L;
private static final class MyCal { long aTime; long bTime; long cTime; long dTime;}
public void usefullMethod(final List<MyCal> myCals) {
final Date a = magicMap.get("a");
final Date b = magicMap.get("b");
final Date c = magicMap.get("c");
final Date d = magicMap.get("d");
final long aTime = a == null ? UNKNWOWN : a.getTime();
final long bTime = b == null ? UNKNWOWN : b.getTime();
final long cTime = c == null ? UNKNWOWN : c.getTime();
final long dTime = d == null ? UNKNWOWN : d.getTime();
for (MyCal myCal : myCals) {
if(myCal.aTime == UNKNWOWN) myCal.aTime = aTime;
if(myCal.bTime == UNKNWOWN) myCal.bTime = bTime;
if(myCal.cTime == UNKNWOWN) myCal.cTime = cTime;
if(myCal.dTime == UNKNWOWN) myCal.dTime = dTime;
}
}
}
PMDの結果:
メソッドusefullMethod()のNPathの複雑さは10625です。
同じ方法で初期化された新しい変数を追加すると、次のようになります。
メソッドusefullMethod()のNPathの複雑さは103125です。
そして、私がすべてを交換した場合はどうなりますか?if-else構造では、次のようになります。
メソッドusefullMethod()のNPathの複雑さは1056です。
なぜ私は三元'でこの非常に高い結果を得たのですか?' オペレーター?
このコードの何が問題になっていますか?(このデモコードでは、デフォルト値を取得するためのメソッドを簡単に抽出できますが、実際のコードでは不可能な場合があります)