Может ли модуль CheckStyle "NeedBraces" работать с вложенными блоками if / else?

Мы используем CheckStyle, чтобы обеспечить соблюдение наших стандартов стиля. Одним из стилевых правил, которые мы решили включить, был модуль NeedBraces.

NeedBraces указывает, что каждый оператор типа блока (такой как if, else, for) должен иметь открывающую и закрывающую фигурные скобки. Однако, насколько я могу судить, он работает не совсем правильно.

Этот пример вызовет ошибку CheckStyle.

    if (true)
    {
        System.out.println("20");   
    }
    else
        System.out.println("30");

Потому что в случае else фигурных скобок нет. Однако в следующем примере не удается вызвать ошибку CheckStyle.

    if (true)
    {
        System.out.println("20");   
    }
    else
        if (true)
        {
            System.out.println("30");
        }

Это должно было произойти из-за отсутствия фигурных скобок в случае else, но checkstyle позволяет это пройти. После двойной проверки документации я не могу найти причину, по которой это не работает.

Так... Может ли модуль CheckStyle "NeedBraces" работать с вложенными блоками if / else? Любые идеи?


Ответ на этот вопрос напрашивается Другой вопрос: есть ли правило, чтобы пометить вышеуказанный нежелательный код как нарушение?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
0
1 582
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я считаю, что это исключение, потому что, несмотря на странное форматирование, у вас есть «else if». В этом случае это не должно заставлять вас заключать фигурные скобки вокруг "если", потому что в итоге вы получите "... else {if {...}}"

Ваш код должен быть отформатирован:

if (true)
{
    System.out.println("20");   
}
else if (true)
{
    System.out.println("30");
}

Именно это и происходило. Виноват форматтер Eclipse (простое решение). Интересно, есть ли правило checkstyle, запрещающее перевод строки между if и else.

Justin Standard 22.12.2008 21:36

В вашем первом примере, если вы попытаетесь добавить еще один оператор в свой блок еще, тогда вам нужно будет поставить фигурные скобки. С другой стороны, во втором примере вы добавите оператор внутри фигурной скобки. Я считаю, что это причина, по которой CheckStyle показывает ошибку в первом случае, потому что он подвержен ошибкам. Есть вероятность, что вы можете добавить оператор без фигурных скобок, когда вы действительно хотите, чтобы это было частью еще, а не снаружи.

Другие вопросы по теме