【问题标题】:How to remove duplicate cases in switch in java如何在java中的switch中删除重复的情况
【发布时间】:2021-08-09 01:00:43
【问题描述】:

我正在运行 sonarQube,但它说这些代码行中有重复项。如何在 switch 语句中解决这个问题?我只是在学习 java 中的单元测试是如何工作的,所以任何帮助都会很棒!

switch () {
    case "M":
        campusLogo = "/watermark_main.png";
        break;
    case "IN":
        campusLogo = "/Watermark_IN.png";
        break;
    case "WA":
        campusLogo = "/Watermark_WA.png";
        break;
    case "MO":
        campusLogo = "/Watermark_MO.png";
        break;
    case "NC":
        campusLogo = "/Watermark_NC.png";
        break;
    case "NV":
        campusLogo = "/Watermark_NV.png";
        break;
    case "OH":
        campusLogo = "/Watermark_OH.png";
        break;
    case "TN":
        campusLogo = "/Watermark_TN.png";
        break;
    case "TX":
        campusLogo = "/Watermark_TX.png";
        break;

    default:
        campusLogo = "/watermark_main.png";
}

【问题讨论】:

  • 故意失败(尽管可能想评论它)而不是breaking每个案例。也就是说,我在这里看不到重复(除了您将字符串分配给变量的事实)。你能发布完整的警告信息吗?
  • 切换表达式在这里很有用。 campusLogo = switch (...) { ... };
  • 你可以省略case "M",让它默认。
  • 为什么不直接使用地图呢?或者只是通过一些小的调整来连接字符串?
  • 另外,您所做的只是将案例代码附加到字符串中。还不如没有任何开关/映射,只做campusLogo = "/Watermark_" + code + ".png"(+ 一些最小的if 检查,也许用Set<String> supportedCodes,事先为default)。

标签: java duplicates sonarqube


【解决方案1】:

我认为以下解决方案应该适合您:

switch (choice) {
    case "IN":
    case "WA":
    case "MO":
    case "NC":
    case "NV":
    case "OH":
    case "TN":
    case "TX":
        campusLogo = "/Watermark_" + choice + ".png";
        break;

    default:
        campusLogo = "/watermark_main.png";
}

【讨论】:

    【解决方案2】:

    如果 SonarQube 说您有重复的块,那与您在此处显示的业务逻辑几乎没有关系。 SonarQube 告诉您的是,您在另一个类或方法中复制了完全相同的业务逻辑。您应该检查重构您的项目,以便此 switch 语句只出现在一个地方。

    【讨论】:

      猜你喜欢
      • 2018-05-26
      • 1970-01-01
      • 1970-01-01
      • 2016-10-13
      • 1970-01-01
      • 2014-08-25
      • 1970-01-01
      • 2013-04-23
      • 1970-01-01
      相关资源
      最近更新 更多