3

对我来说,下面的 Java 代码是完全有效的,很好的风格:

enum Side { LEFT, RIGHT };
...
Side side = ...;
switch (side) {
case LEFT:
    // do something
    break;
case RIGHT:
    // do something
    break;
}

对于 SonarQube 的规则SwitchLastCaseIsDefaultCheck,这还不够好,它需要一个默认情况。现在在这里,默认情况是多余的,因为枚举已被完全覆盖。

对于枚举,我希望看到一个测试来检查枚举是否被完全覆盖并抱怨它是否没有被覆盖并且没有默认情况(Eclipse 可以做到这一点)。两者都应该没问题。事实上,完全覆盖枚举允许稍后在扩展枚举时发出编译时警告,而给出默认情况只会在运行时失败。

可选地,完全覆盖枚举和给出默认情况都可能触发无法访问代码的警告。

4

3 回答 3

3

我建议最好始终包含一个默认情况,该情况会引发适当的RuntimeException. 这样,您就可以防止未来的开发人员添加一些内容enum而忘记更新switch语句。

于 2013-10-16T09:15:33.273 回答
0

Eclipse 是一个 IDE,它可以帮助您在此处使用选定的语言开发程序,在您的情况下它是 JAVA,它不做任何未在语言中指定的事情,所以这不是 eclipse 的问题,这就是全部关于语言的规范。

于 2013-10-16T09:10:02.207 回答
0

事实证明,在提出这个问题三年后,我发现squid:SwitchLastCaseIsDefaultCheck现在检查是否完整覆盖了enum. 可能已经有一段时间了,至少对于 Sonarqube 的 Java 插件的 4.4.0.8066,我可以确认这一点。这对我来说是一个非常令人满意的答案。

于 2017-01-09T14:21:27.227 回答