Java-SonarQube,有关“实用程序类不应具有公共构造函数”(squid:S1118)的问题

问题描述 投票:8回答:1

我正在使用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
    }

}

SonarQube(声纳Java:4.2.1.6971),报告了关于S1118的问题。

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

SuperClass仍然可以创建实例,即使ÌnstanceHolder具有私有构造函数也是如此。

顺便说一句:添加构造函数将消除声纳问题,因此我认为分析器将其标记为违反规则,因为内部存在'UtilityClass',无需进一步调查。

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

java sonarqube sonarlint
1个回答
-1
投票

将您的课程定为最终课程,以免创建实例。

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

        private SuperClass() {
        }
        ......
    }
© www.soinside.com 2019 - 2024. All rights reserved.