#java #performance #pmd
#java #Производительность #pmd
Вопрос:
public boolean validate(final Beanform[] bagdata) {
final int length = bagdata.length;
if (length == 4) {
return true;
} else if (length == 1) {
result = "length==1, Length should be greater than 1";
return false;
} else if (length == 3) {
if (bagdata[0].getCycleType() == null) {
result = "Cyclic Type is null for length==3";
return false;
}
}
return true;
}
Привет ,
Приведенный выше фрагмент Java-кода, который работает нормально. Однако, когда я запустил PMD, работающий против кода. Метод должен иметь только одну точку выхода, и это должно быть последним утверждением в методе
Не могли бы вы, кто-нибудь, пожалуйста, сказать мне, как сформировать этот код, чтобы он следовал методу, у которого должна быть только одна точка выхода, и это должно быть последним утверждением в методе, и какой наилучший пример в этом типе кода??
пожалуйста, поделитесь своим опытом по этому поводу.
Ответ №1:
Вы уверены, что там не сказано, что у вашего метода должна быть только одна точка выхода?
Показанный вами код имеет только одну точку входа, но 4 точки выхода.
Обновление: мы говорим о точках выхода.
Во-первых, только потому, что инструмент сообщает вам, что ему не нравится ваш рабочий код, это не значит, что он прав, а вы ошибаетесь. Дебаты об одной / нескольких точках выхода имеют долгую историю; оба, вероятно, в определенной степени правы. Другими словами, не исправляйте то, что не сломалось!
Но если вы действительно хотите успокоить PMD, вот что вы могли бы сделать:
- объявите логическую переменную, т. е.
isValid
, в верхней части вашего метода - замените каждый
return true/false
оператор наisValid = true/false
- в конце метода,
return isValid
Комментарии:
1. Прошу прощения за беспокойство других, фактический комментарий таков: «Метод должен иметь только одну точку выхода, и это должно быть последним утверждением в методе» теперь позвольте мне изменить вопрос .
2. Большое спасибо Мэтту Фенвику за ответ, теперь я думаю, что я поступил правильно вместо добавления дополнительной логической переменной.
3. Если вам интересно, почему у PMD есть это предложение, пожалуйста, ознакомьтесь с этим связанным вопросом: programmers.stackexchange.com/questions/118703 / …
4. @RyanTenney — вау, 200 голосов за 2 дня! Спасибо за ссылку.
5. не исправляйте то, что не сломано, ИМХО, неправильно. Что верно, так это то, что у вас должен быть тест для рефакторинга чего-либо, прежде чем изменять код, который не поврежден.