Java-код PMD жалуется, поскольку метод должен иметь только одну точку выхода

#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. не исправляйте то, что не сломано, ИМХО, неправильно. Что верно, так это то, что у вас должен быть тест для рефакторинга чего-либо, прежде чем изменять код, который не поврежден.