1,1 Как установить проверку PMD [...]
PMD хранит править конфигурацию в специальном хранилище, указанного в качестве Ruleset файла XML.Этот файл конфигурации содержит информацию о установленных в настоящее время правилах и их атрибутах.
Эти файлы находятся в каталоге rulesets
дистрибьютора PMD. При использовании PMD с Eclipse отметьте Customizing PMD.
1.2 Необходимо ли следовать этому предупреждению?
A class which only has private constructors should be final
Все конструкторы всегда начинают с помощью вызова конструктора суперкласса. Если конструктор явно содержит вызов конструктора суперкласса, этот конструктор используется. В противном случае подразумевается конструктор без аргументов. Если конструктор без аргументов не существует или не отображается в подклассе, вы получаете ошибку времени компиляции.
Так что на самом деле невозможно получить подкласс класса, каждый из которых является закрытым. Таким образом, маркировка такого класса, как final
, является хорошей идеей (но не обязательной), поскольку она явно препятствует подклассу.
1.3 Что это должно означать?
The class 'Dog' has a Cyclomatic Complexity of 3 (Highest = 17)
Сложность является количеством точек принятия решений в методе плюс один для записи методы. Точками принятия решения являются «if», «while», «for» и «case labels». Как правило, 1-4 - низкая сложность, 5-7 - умеренная сложность, 8-10 - высокая сложность, а 11+ - очень высокая.
После того, что сказал, я просто процитирую некоторые части Aggregate Cyclomatic complexity is meaningless:
[...] Этот показатель имеет смысл только в контексте одного метода. Упоминание о том, что класс имеет Cyclomatic сложности X, по существу бесполезен.
Поскольку цикломатическая сложность измеряет Pathing в методе, каждый метод имеет по крайней мере, цикломатическая сложность 1, правильно? Таким образом, следующий метод геттер имеет значение CCN 1:
public Account getAccount(){
return this.account;
}
Это ясно из этого метода буги что account
является свойством этого класса. Теперь представьте, что этот класс имеет 15 свойств и следует типичной парадигме getter/setter для каждого свойства , и это единственные доступные методы. Это означает, что класс имеет 30 простых методов, каждый из которых имеет значение Cyclomatic сложности 1. Совокупное значение класса тогда равно 30.
Имеет ли это значение какое-либо значение, человек? Конечно, смотреть его со временем может что-то интересное; однако сам по себе, как совокупное значение, он по существу не имеет смысла. 30 для класса ничего не значит, 30 для метода что-то означает.
В следующий раз, когда вы оказываетесь чтением Copasetic совокупного цикломатического значения сложности для класса, убедитесь, что вы понимаете, как много методов класс содержит. Если совокупность Cyclomatic сложность значение класса 200 - оно не должно поднять любые красные флаги, пока вы не узнаете количество методов . Более того, если вы обнаружите, что количество методов еще не установлено Значение сложности Cyclomatic высокое, вы почти всегда найдете сложность , локализованную по методу. Право на!
Так что это правило PMD должно приниматься с осторожностью (и на самом деле не очень ценно).
1.4 Как насчет этого? Я хотел бы изменить это, но ничего не пересекает мой ум в данный момент относительно изменения:
Assigning an Object to null is a code smell. Consider refactoring.
Не уверен, что вы не получите об этом.
2.1 Неужели так плохо писать в статическое поле, в какой-то момент позже его объявления? [...]
Мое предположение, что вы получаете предупреждение, потому что метод содержит несинхронизированную ленивую инициализацию нелетучего статического поля. И поскольку компилятор или процессор могут изменять порядок инструкций, потоки не гарантированно будут видеть полностью инициализированный объект, если этот метод может быть вызван несколькими потоками. Вы можете сделать поле volatile, чтобы исправить проблему.
2,2 [...] Immediate dereference of the result of readLine()
Если нет больше строк текста для чтения, readLine()
возвратит нуль и разыменования, который будет генерировать исключения нулевого указателя. Поэтому вам действительно нужно проверить, равен ли результат.
Хорошо .. Что я могу сказать? Я любопытный человек :-). Спасибо за ссылку. – hypercube
Поблагодарите u @Svante за изменения. – hypercube