Мы используем 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? Любые идеи?
Ответ на этот вопрос напрашивается Другой вопрос: есть ли правило, чтобы пометить вышеуказанный нежелательный код как нарушение?




Я считаю, что это исключение, потому что, несмотря на странное форматирование, у вас есть «else if». В этом случае это не должно заставлять вас заключать фигурные скобки вокруг "если", потому что в итоге вы получите "... else {if {...}}"
Ваш код должен быть отформатирован:
if (true)
{
System.out.println("20");
}
else if (true)
{
System.out.println("30");
}
В вашем первом примере, если вы попытаетесь добавить еще один оператор в свой блок еще, тогда вам нужно будет поставить фигурные скобки. С другой стороны, во втором примере вы добавите оператор внутри фигурной скобки. Я считаю, что это причина, по которой CheckStyle показывает ошибку в первом случае, потому что он подвержен ошибкам. Есть вероятность, что вы можете добавить оператор без фигурных скобок, когда вы действительно хотите, чтобы это было частью еще, а не снаружи.
Именно это и происходило. Виноват форматтер Eclipse (простое решение). Интересно, есть ли правило checkstyle, запрещающее перевод строки между if и else.