Я использую 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
Почему я получил этот очень высокий результат с тройной '?' Оператор?
Что не так с этим кодом? (В этом демо-коде легко извлечь метод для получения значений по умолчанию, но в реальном коде это может оказаться невозможным)