小编Tes*_*ter的帖子

Java - SonarQube,关于'实用程序类不应该有单独的公共构造函数'(squid:S1118)的问题

我正在使用SonarLint分析对旧代码执行静态代码分析.我不能在这里粘贴代码,但它类似于:

@SuppressWarnings("static-access")
public class SuperClass {

    private SuperClass() {
    }

    public static SuperClass getInstance() {
        return InstanceHolder.instance;
    }

    private static class InstanceHolder {
        public final static SuperClass instance = new SuperClass();
    }

    public void doSomething() {
        //do something
    }

}
Run Code Online (Sandbox Code Playgroud)

SonarQube(sonar-java:4.2.1.6971)报告了S1118的一个问题.

添加私有构造函数在InstanceHolder这里没有解决效果,因为SuperClass它是唯一可以由于其私有修饰符而创建它的实例的类.

SuperClass即使拥有ÌnstanceHolder私有构造函数,仍然可以创建一个实例.

BTW:添加构造函数会删除声纳问题,所以我认为分析器将此标记为规则违规,因为内部的"UtilityClass"没有进一步调查.

这是一个错误吗?这是一个线程安全单例的例子,而不是设计缺陷.

java sonarqube sonarlint

8
推荐指数
1
解决办法
2663
查看次数

(SonarQube)LinkedHashMap和S1640(告诉你使用EnumMap)

我可能会错过一些东西,但是声明了LinkedHashmap:

private final LinkedHashMap<anEnum, anInteger> linkedHashMap;
Run Code Online (Sandbox Code Playgroud)

然后:

linkedHashMap = new LinkedHashMap<anEnum, anInteger>();
Run Code Online (Sandbox Code Playgroud)

结果是:

"使用枚举值的键映射应替换为EnumMap"(SQUID:1640)

由于没有"LinkedEnumMap",因此应忽略此声明.

java enums sonarqube sonarlint

1
推荐指数
1
解决办法
409
查看次数

标签 统计

java ×2

sonarlint ×2

sonarqube ×2

enums ×1