Ich erhalte diese Warnung auf Sonar. Ich möchte eine Lösung, um diese Warnung auf Sonar zu entfernen .. __ Meine Klasse sieht so aus:
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;
}
}
ich möchte eine geeignete Lösung, um diese Warnung vom Sonar zu entfernen.
Wenn diese Klasse nur eine Utility-Klasse ist, sollten Sie die Klasse als final definieren und einen privaten Konstruktor definieren:
public final class FilePathHelper {
private FilePathHelper() {
//not called
}
}
Dadurch wird verhindert, dass der standardmäßige Konstruktor ohne Parameter an anderer Stelle in Ihrem Code verwendet wird. Darüber hinaus können Sie die Klasse als final definieren, sodass sie nicht in Unterklassen erweitert werden kann. Dies ist eine bewährte Methode für Dienstprogrammklassen. Da Sie nur einen privaten Konstruktor deklariert haben, können ihn andere Klassen ohnehin nicht erweitern. Es ist jedoch eine bewährte Methode, die Klasse als endgültig zu kennzeichnen.
Ich kenne Sonar nicht, aber ich vermute, dass es einen privaten Konstruktor sucht:
private FilePathHelper() {
// No-op; won't be called
}
Andernfalls stellt der Java-Compiler einen öffentlichen parameterlosen Konstruktor bereit, den Sie wirklich nicht möchten.
(Sie sollten es auch final machen, obwohl andere Klassen es sowieso nicht erweitern könnten, da es nur einen privaten Konstruktor gibt.)
Ich benutze eine Aufzählung ohne Instanzen
public enum MyUtils {
; // no instances
// class is final and the constructor is private
public static int myUtilityMethod(int x) {
return x * x;
}
}
sie können dies mit aufrufen
int y = MyUtils.myUtilityMethod(5); // returns 25.
Die beste Methode ist, einen Fehler auszulösen, wenn die Klasse erstellt wird.
Beispiel:
/**
* The Class FooUtilityService.
*/
final class FooUtilityService{
/**
* Instantiates a new FooUtilityService. Private to prevent instantiation
*/
private FooUtilityService() {
// Throw an exception if this ever *is* called
throw new AssertionError("Instantiating utility class.");
}
public class LmsEmpWfhUtils {
private LmsEmpWfhUtils()
{
// prevents access default paramater-less constructor
}
}
Dadurch wird verhindert, dass der standardmäßige Konstruktor ohne Parameter an anderer Stelle in Ihrem Code verwendet wird.