【问题标题】:Where is the Sonar "duplicated code" here?声纳“重复代码”在哪里?
【发布时间】:2017-03-06 05:05:31
【问题描述】:

我刚刚在示例 Sonar 项目上运行了声纳扫描仪。它给我的信息是“第 7-20 行有重复的代码”。谁能解释一下?

【问题讨论】:

  • 代码复制不仅仅是复制粘贴代码,它是复制粘贴的逻辑

标签: java sonarqube


【解决方案1】:

SonarQube 告诉您这部分代码包含重复的逻辑。这并不一定意味着代码本身是复制粘贴的,但从概念上讲,完全相同的事情正在多个地方发生。在这种情况下,对于int 值返回String 值的逻辑显然是重复的。

这里有一个简单的解决方案:

String[] array = { "One", "Two", "Three", "Four", "Five", "Six" };
if (i >= 1 && i <= array.length) {
    return array[i - 1];
}

【讨论】:

  • 我不知道 Sonar 如何检测“重复逻辑”,但解决方案看起来是正确的。
  • 在复制粘贴检测中忽略文字。因此,如果您“空白” int 文字和字符串文字......代码是重复的。
【解决方案2】:

Java 项目的声纳规则:

只要有一段代码就被认为是重复的 无论数量多少,10 个连续语句的相同序列 标记和线条。无法覆盖此阈值。

您需要修改多个 if return 部分

【讨论】:

  • 我没有找到超过 7 个。你是怎么数的?
【解决方案3】:
public class Test
{
   private static final String[] WORDS;

   static {
      WORDS = new String[] {
            "One", "Two", "Three", "Four", "Five", "Six"
      };
   }

   public String intToEnglishValue(final int number) {
      return number > 0 && number <= WORDS.length ? WORDS[number - 1] : "";
   }
}

【讨论】:

    猜你喜欢
    • 2017-06-11
    • 1970-01-01
    • 2022-01-14
    • 2015-06-29
    • 2021-07-14
    • 2017-01-16
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多