まくまくJavaノート
private のコンストラクタでインスタンス化不可能を強制する
2016-02-09

コンストラクタを明示的に定義しないと、public なパラメータなしのデフォルトコンストラクタが提供されます。 static なメソッドだけを持つユーティリティクラスを作る場合は、明示的に private なパラメータなしのコンストラクタを定義することで、インスタンスが生成されることを防ぐことができます。

public class MathUtil {
    // This is a utility. No need to instantiate.
    private MathUtil() {
        // Prevent being called from this class
        throw new AssertionError();
    }

    public static int add(int a, int b) {
        return a + b;
    }
}

コンストラクタを private にしておくことで、サブクラス化されることを防ぐ効果もあります(super クラスのコンストラクタを呼べなくなるため)。 万が一、クラス内のメソッドからインスタンスを生成しようとしてしまった場合にすぐに気付けるようにするために、上記ではコンストラクタの中で Error をスローしています。

2016-02-09