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, и, если возможно, ее следует извлечь в метко названный метод очистки. Это не только отключит предупреждение, но и улучшит читабельность вашего кода.

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