堅牢性を獲得する章

2.1. ユーティリティクラス

『目的』

ユーティリティクラスでの無駄をなくしましょう。

『Before』

ユーティリティクラスとは、static メソッドと static 変数だけが含まれているクラスを指します。
たとえば java.lang.Math クラスなどがそうですね。

ユーティリティクラスはインスタンス化されるように設計されているわけではありません。
そのインスタンスは意味がありません。

よく見かけるユーティリティクラスにこのようなものがあります。

public final class UtilHoge {
    /* メソッド。 */
    public static final void foo() {
           :
    }
}

このクラスはコンストラクタを明示的に記載していないです。
その場合、public な引数なしのコンストラクタが存在するのと同等ですね。

なので、インスタンス化できてしまいます。

/* インスタンス化できてしまう。 */
UtilHoge util = new UtilHoge();

意味無いことができるような状態は好ましくありませんね。

『After』

無駄なインスタンスは作らせないようにすべきです。

1つの明示的な private コンストラクタを含ませれば防止できます。
コンストラクタが private であれば、決して外部からアクセスできません。
よって、クラス自身から呼び出さない限りインスタンス化されないことが保証されます。

たとえば java.lang.Math はコンストラクタが private になっていますね。

public final strictfp class Math {
    /**
     * Don't let anyone instantiate this class.
     */
    private Math() {}
      :
}

コンストラクタは呼び出せません。

/* インスタンス化できない。 */
// Math mathUtil = new Math();

『まとめ』

ユーティリティクラスは、インスタンス化されないよう明示的にprivateコンストラクタを記載しましょう。

< 前のページへ

Pagetop