SonarQube, операторы перехода в блоке finally (squid:S1143)
Я знаю, операторы jump в блоке finally не должны использоваться. В этом простом примере "break" используется для отключения "switch". SonarQube (5.6.3) с sonar-java 4.5.0.8398 сообщает о проблеме:
Msgstr "Операторы перехода не должны встречаться в блоках"finally"(squid:S1143)"
public static void breakInFinallyIssue(){
int a = 0;
try{
a = 1 / 0;
}catch(Exception x){
System.out.println("div by zero");
}
finally{
switch (a) {
case 0:
//do something
break;
default:
break;
}
//do something more
}
}
Это известная FP/ ошибка?
1 ответ
Решение
Вы правы, что это ложный позитив. Однако такая сложная логика не относится к блоку finally, и, если возможно, ее следует извлечь в метко названный метод очистки. Это не только отключит предупреждение, но и улучшит читабельность вашего кода.