Java - SonarQube,在 'Utility classes should not have public constructors' 上发布(squid :S1118) in singleton

标签 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
    }

}

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

将私有(private)构造函数添加到 InstanceHolder这里没有解决效果,因为 SuperClass由于其私有(private)修饰符,是唯一可以创建它的实例的类。
SuperClass仍然可以创建实例,即使使用 ÌnstanceHolder有一个私有(private)构造函数。

顺便说一句:添加构造函数消除了 Sonar 问题,所以我认为分析器将其标记为违反规则,因为内部“UtilityClass”没有进一步调查。

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

最佳答案

使您的类(class)成为 final类,以便避免创建实例。

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

        private SuperClass() {
        }
    }

关于Java - SonarQube,在 'Utility classes should not have public constructors' 上发布(squid :S1118) in singleton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44591666/

相关文章:

java - StackExchange API - 反序列化 JSON 响应中的日期

java - 数据集成问题——如何集成相似的实体

java - 空 GroupID Sonar eclipse

multithreading - 将实例调用到同一线程内的线程

java - eclipse 中的 Sonarlint 规则集文件在哪里?

java - SQLiteDatabase 仅在不存在时才添加

java - 我可以在 Sonar 中使用 EclEmma 覆盖报告吗?

java - SonarQube 因错误而停止

java - 即使它没有添加任何内容,我是否应该覆盖子类中的 equals 和 hashCode ?

java - 从对象映射到动态字符串