【发布时间】:2021-05-09 14:19:50
【问题描述】:
我真的不明白为什么 Sonar 一直抱怨我“没有休息声明”这一事实,即使它不需要。
我的开关:
public static String lookupVoyageId(String referenceNumber, String sender) {
switch (sender) {
case "400_HGENT":
case "200_HAPEN":
case "500_HOOST":
Preconditions.checkArgument(referenceNumber.contains("-"));
return referenceNumber.split("-")[0];
case "600_HZEEB":
Preconditions.checkArgument(referenceNumber.length() >= 6);
return referenceNumber.substring(0, 6);
case "800_BVL":
throw new TransferException("This reference number for IBIS isn't according to the requirements. Can't implement it yet.");
case "MCCD":
throw new TransferException("This reference number for MCCD isn't according to the requirements. Can't implement it yet.");
default:
throw new TransferException("The sender (" + sender + ") couldn't be identified.");
}
}
声纳不断给我关键: "switch 语句不包含 break"
这是为什么?我不需要在此开关中进行任何中断?
我知道这可能是一个特定的案例,但我在网上找不到任何东西。
【问题讨论】:
-
它给你的错误是哪一行?不是针对那些失败的案例吗?就个人而言,我希望在那里看到
// fall-through评论,但我怀疑这不是 Sonar 所抱怨的...... -
@Slanec 就在开关的第一行。而且我在另一个开关中也遇到了同样的关键问题。
-
@Slanec 实际上,该评论可能会很好地修复警告。根据stackoverflow.com/questions/5479019/… sonar 使用 checkstyle 等库。并且 checkstyle (checkstyle.sourceforge.net/config_coding.html#FallThrough) 如果打算失败,则希望得到评论。
-
如果能准确地确定引发此问题的规则键,那就太好了。如果这个问题是由规则 S128 提出的,那么这将检测到每一个失败甚至是有意的。
-
@Magnilex SonarQube 主要依靠自己的分析仪,除非另有特别说明:)