SonarQube,finally 块中的跳转语句(鱿鱼:S1143)

SonarQube, jump statements in finally block (squid:S1143)

我知道,finally 块中的跳转语句不应该使用。在这个简单的示例中,'break' 用于中断 'switch'。 SonarQube (5.6.3) 与 sonar-java 4.5.0.8398 报告一个问题:

"Jump statements should not occur in "终于“块(鱿鱼: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/bug 吗?

你是对的,这是误报。然而,这种复杂的逻辑不属于 finally 块,如果可能,应该提取到恰当命名的清理方法。这不仅会关闭警告,还会提高代码的可读性。