我正在使用 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
为什么我用三元“?”得到这么高的结果?操作员?
这段代码有什么问题?(在此演示代码中,很容易提取一种获取默认值的方法,但在实际代码中可能无法实现)