规则 squid:128 似乎存在以防止在 switch case 中失败,除非明确说明。这似乎是一个合理的规则,因为忘记休息是一个常见的错误。
然而,当需要时,失败是完全有效的。
此规则的文档指出实现失败的唯一方法是使用 continue
case 4: // Use of continue statement
continue;
我还检查了 SwitchCaseWithoutBreakCheck 的源代码是否真正检查了“continue”语句的实现
@Override
public void visitContinueStatement(ContinueStatementTree tree) {
super.visitContinueStatement(tree);
markSwitchCasesAsCompliant();
}
但是Java语言不支持continue in switch/case。在线文档和 ./java-checks/src/test/files/checks/SwitchCaseWithoutBreakCheck.java 都不是有效的 Java 程序。
我是不是遗漏了什么或者这条规则是否完全被打破并阻止了 fall-through 的使用?
最佳答案
你说这里的描述是错误的是完全正确的,然后如果你想实际使用 fallthrough 你实际上没有办法不触发规则(因此你可能想在这个问题中将问题标记为误报案例或一起停用规则)
将规则称为“已损坏”是一种观点,因此我不会对此争论;)
尽管如此,已经创建了一个票证来处理这个问题:http://jira.sonarsource.com/browse/SONARJAVA-1169
关于java - Sonar ,S128 : Switch cases should end with an unconditional "break" statement VS continue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30920156/