如何在Sonar上禁用警告:隐藏实用程序类构造函数?

我在Sonar上收到此警告:

隐藏实用程序类构造函数:

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

我的班级:

public class FilePathHelper {
    private static String resourcesPath;
    public static String getFilePath(HttpServletRequest request) {
        if(resourcesPath == null) {
            String serverpath = request.getSession()
                                       .getServletContext()
                                       .getRealPath("");
            resourcesPath = serverpath + "/WEB-INF/classes/";   
        }
        return resourcesPath;       
    }
}

我想要解决方案来删除Sonar Qube上的此警告


答案 1

如果此类只是一个实用程序类,则应使该类成为最终类并定义一个私有构造函数:

public final class FilePathHelper {
   private FilePathHelper() {
      //not called
   }
}

这样可以防止在代码中的其他位置使用默认的无参数构造函数。

此外,您可以使类成为最终类,以便它不能在子类中扩展,这是实用程序类的最佳做法。由于您只声明了私有构造函数,因此其他类无论如何都无法扩展它,但最佳做法仍然是将该类标记为 final。


答案 2

我不了解Sonar,但我怀疑它正在寻找一个私有构造器:

private FilePathHelper() {
    // No-op; won't be called
}

否则,Java编译器将提供一个公共无参数构造函数,这是您真正不想要的。

(您还应该使该类成为最终类,尽管其他类无论如何都无法扩展它,因为它只有一个私有构造函数。