ОК, просмотрев код с PMD и FindBugs анализаторами кода, я смог внести отличные изменения в рассмотренный код. Однако есть некоторые вещи, которые я не знаю, как исправить. Я буду повторять их ниже, и (для лучшей справки) я дам каждому вопросу номер. Не стесняйтесь отвечать на все/все из них. Спасибо за ваше терпение.Простые, общие интересы, основанные на коде анализаторах, вопросы Java
1. Даже жестко я удалил некоторые из правил, соответствующие предупреждения все еще существуют после переоценки кода. Любая идея почему?
2. Пожалуйста, посмотрите на декларациях:
private Combo comboAdress;
private ProgressBar pBar;
и ссылки на объекты по добытчиками и сеттеров:
private final Combo getComboAdress() {
return this.comboAdress;
}
private final void setComboAdress(final Combo comboAdress) {
this.comboAdress = comboAdress;
}
private final ProgressBar getpBar() {
return this.pBar;
}
private final void setpBar(final ProgressBar pBar) {
this.pBar = pBar;
}
Теперь я удивляюсь, почему первое заявление не дайте мне предупреждение о PMD, а второе дает мне следующее предупреждение:
Found non-transient, non-static member. Please mark as transient or provide accessors.
Подробнее об этом предупреждении here.
3. Вот еще одно предупреждение, а также дается PMD:
A method should have only one exit point, and that should be the last statement in the method
Более подробную информацию о том предупреждения here.
Теперь я с этим согласен, но что, если я пишу что-то вроде этого:
public void actionPerformedOnModifyComboLocations() {
if (getMainTree().isFocusControl()) {
return;
}
....//do stuffs, based on the initial test
}
Я склонен согласиться с правилом, но если исполнение кода предложить несколько точек выхода, что я должен делать ?
4. PMD дает мне это:
Found 'DD'-anomaly for variable 'start_page' (lines '319'-'322').
, когда я объявляю что-то вроде:
String start_page = null;
избавиться от этой информации (уровень предупреждения инфо), если я удалить присваивание null, но ... я получил ошибку от IDE, заявив, что переменная может быть неинициализирована, в какой-то момент позже в коде. Итак, я как бы застрял в этом. Преодоление предупреждения - это лучшее, что вы можете сделать?
5. ПМД Предупреждение:
Assigning an Object to null is a code smell. Consider refactoring.
Это случай использования singletone компонентов GUI или случае метода, который возвращает сложные объекты. Присвоение результата null в разделе catch() оправдано необходимостью избежать возврата неполного/несогласованного объекта. Да, NullObject следует использовать, но есть случаи, когда я не хочу этого делать. Должен ли я подавить это предупреждение?
6.FindBugs предупреждение # 1:
Write to static field MyClass.instance from instance method MyClass.handleEvent(Event)
в методе
@Override
public void handleEvent(Event e) {
switch (e.type) {
case SWT.Dispose: {
if (e.widget == getComposite()) {
MyClass.instance = null;
}
break;
}
}
}
статической переменной
private static MyClass instance = null;
переменная позволяет мне проверить, является ли форма уже создана и видимым или нет, и в некоторых случаях мне нужно принудительно воссоздать форму. Другого выбора здесь я не вижу. Какие-нибудь идеи? (MyClass реализует Listener, следовательно, метод override в методе handleEvent()).
7. FindBugs предупреждение № 2:
Class MyClass2 has a circular dependency with other classes
Это предупреждение отображается на основе простого импорта других классов. Нужно ли мне реорганизовать этот импорт, чтобы это предупреждение исчезло? Или проблема связана с MyClass2?
ОК, достаточно сказал, что на данный момент .. ожидайте обновления, основываясь на дополнительных выводах и/или ваших ответах. Благодарю.
FindBugs использует файлы классов для анализа. Для его поиска нет следов неиспользуемого импорта. –
Я думаю, что это утверждение верно, так как анализ выполняется на уровне байт-кода. – hypercube