我在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;
}
}
我想要适当的解决方案来消除声纳上的这个警告。
发布于 2013-01-18 20:16:06
如果该类只是一个实用程序类,则应该使该类成为final并定义一个私有构造函数:
public final class FilePathHelper {
private FilePathHelper() {
//not called
}
}
这可以防止在代码中的其他地方使用默认的无参数构造函数。此外,您可以将类设为final,这样它就不能在子类中扩展,这是实用程序类的最佳实践。由于您只声明了一个私有构造函数,其他类无论如何都不能扩展它,但将该类标记为final仍然是一个最佳实践。
发布于 2013-01-18 20:15:57
我不知道Sonar,但我怀疑它正在寻找一个私有构造函数:
private FilePathHelper() {
// No-op; won't be called
}
否则,Java编译器将提供一个公共的无参数构造函数,这是您实际上不想要的。
(您还应该将类设为final,尽管其他类无论如何都不能扩展它,因为它只有一个私有构造函数。)
发布于 2013-01-18 20:37:55
我使用不带实例的枚举
public enum MyUtils {
; // no instances
// class is final and the constructor is private
public static int myUtilityMethod(int x) {
return x * x;
}
}
您可以使用以下命令调用此方法
int y = MyUtils.myUtilityMethod(5); // returns 25.
https://stackoverflow.com/questions/14398747
复制相似问题