1. ホーム
  2. java

[解決済み] Hide Utility Class Constructor : ユーティリティクラスはパブリックまたはデフォルトコンストラクタを持つべきではありません。

2022-01-28 23:11:14

質問

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;       
    }
}

ソナー上のこの警告を取り除くための適切なソリューションが欲しいです。

解決方法を教えてください。

このクラスが単なるユーティリティクラスであれば、クラスを final にして private コンストラクタを定義する必要があります。

public final class FilePathHelper {

   private FilePathHelper() {
      //not called
   }
}

これにより、デフォルトのパラメータなしコンストラクタがコード内の他の場所で使用されるのを防ぐことができます。さらに、クラスを final にして、サブクラスで拡張できないようにすることもできます。これはユーティリティクラスのベストプラクティスです。private コンストラクタしか宣言していないので、他のクラスがそれを拡張することはできませんが、それでもクラスを final にすることはベストプラクティスと言えます。