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

Tes*_*ter 8 java sonarqube sonarlint

我正在使用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"没有进一步调查.

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

小智 -1

将您的类设为最终类,以避免创建实例。

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

        private SuperClass() {
        }
    }
Run Code Online (Sandbox Code Playgroud)