我正在使用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',无需进一步调查。
这是一个错误吗?这是一个线程安全的单例示例,而不是设计缺陷。
将您的课程定为最终课程,以免创建实例。
@SuppressWarnings("static-access")
public final class SuperClass {
private SuperClass() {
}
......
}