37

ユーティリティ クラスに対して行う一般的なことは、それらにプライベート コンストラクターを与えることです。

public final class UtilClass {
    private UtilClass() {}

    ...
}

しかし残念なことに、一部のツールはそのプライベート コンストラクターを好みません。クラス内で呼び出されたことがない、テストでカバーされていない、ブロックにコメントが含まれていないなどの警告が表示される場合があります。

代わりにこれを行うと、これらの警告の多くが消えます。

public enum UtilClass {;
    ...
}

私の質問は次のとおりです。将来の開発者に対する果てしない憎しみ以外に、値のない列挙型と Java のプライベート コンストラクターを持つクラスとの間には、どのような重要な違いがありますか?

私は尋ねていないことに注意してくださいJava列挙型とパブリック静的最終フィールドを持つクラスの利点は何ですか? . もののリストが定数の束であるか列挙型であるかを決定しているのではなく、コンストラクターのないクラスまたは値のない列挙型に関数の束を配置することを決定しています。

また、私は実際にこれをやりたくないことに注意してください。一般的な言語知識の一部としてトレードオフを知りたいだけです。

たとえば、列挙型を使用すると、 のような役に立たないメソッドでオートコンプリートが汚染されUtilClass.values()ます。他にどのような欠点がありますか?長所?

4

4 に答える 4

9

ユーティリティ クラスの次のパターンも、インスタンスが存在しないという鉄壁の保証を提供します。

public abstract class Util {
    private Util() { throw new Error(); }
    ... // static methods
}

その上、列挙型によって提供される追加の無関係な静的メソッドはありません。

于 2014-10-28T22:15:53.577 に答える