【发布时间】:2013-10-16 08:52:42
【问题描述】:
对我来说,下面的 Java 代码是完全有效的,很好的风格:
enum Side { LEFT, RIGHT };
...
Side side = ...;
switch (side) {
case LEFT:
// do something
break;
case RIGHT:
// do something
break;
}
对于 SonarQube 的规则 SwitchLastCaseIsDefaultCheck,这还不够好,它需要一个默认情况。现在在这里,默认情况是多余的,因为枚举已被完全覆盖。
对于枚举,我希望看到一个测试来检查枚举是否被完全覆盖,如果没有被覆盖并且没有默认情况(Eclipse 可以做到这一点)。两者都应该没问题。事实上,完全覆盖枚举允许稍后在扩展枚举时发出编译时警告,而给出默认情况只会在运行时失败。
可选地,完全覆盖枚举和给出默认情况都可能触发无法访问代码的警告。
【问题讨论】:
-
这里的确切问题是什么?
-
为什么不在枚举中实现命令模式并在那里编写特定于枚举的代码?这样,您根本不需要 switch 语句,并且如果有人扩展该枚举(可能使用
UP或DOWN)但忘记更新该开关(这正是声纳警告的原因,如果你有该规则有效)。 -
@Julien:问题是“如何使用 SonarQube 深入分析 Java 切换枚举?”
-
@Matthias:将代码放入枚举中巧妙地解决了添加枚举常量也应始终添加处理它的代码的问题。然而,这样做并不总是可行的,所以问题仍然存在。
标签: java enums switch-statement sonarqube