公用的工具类不应该有公共的构造函数

Posted acm-bingzi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了公用的工具类不应该有公共的构造函数相关的知识,希望对你有一定的参考价值。

Sonarlint检测出如下问题:

Utility classes should not have public constructors

  Utility classes, which are collections of static members, are not meant to be instantiated. Even abstract utility classes, which can be extended, should not have public constructors.
  Java adds an implicit public constructor to every class which does not define at least one explicitly. Hence, at least one non-public constructor should be defined.


公用的工具类不应该有公共的构造函数

公用的工具类是静态成员的集合,并不意味着要实例化。甚至扩展的抽象工具程序类也不应该有公共构造函数。

Java会向不定义构造函数的每个类添加隐式的公共构造函数。因此,应该定义至少一个非公共构造函数。


错误代码示例:

class StringUtils { // Noncompliant      
    public static String concatenate(String s1, String s2) {
        return s1 + s2;
    }
}

 

正确代码示例:

class StringUtils { // Compliant    

    private StringUtils() {
        throw new IllegalStateException("Utility class");
    }

    public static String concatenate(String s1, String s2) {
        return s1 + s2;
    }
}

  

例外情况:

当类包含 public static void main(String[] args) 方法时,它不被视为工具类类,并且将被该规则忽略。

以上是关于公用的工具类不应该有公共的构造函数的主要内容,如果未能解决你的问题,请参考以下文章

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

JavaBean规范

javaBean规范

隐藏实用程序类构造函数:实用程序类不应具有公共或默认构造函数

使用java.lang.Exception的错误:测试类应该只有一个公共构造函数

通过将 cacheManager 迁移到构造函数注入,类不存在