1. ホーム

[解決済み】ユーティリティクラスを作成するにはどうしたらいいですか?重複

2022-04-13 20:08:28

質問

ユーティリティメソッドを持つクラスを作りたいのですが、例えば

public class Util {

   public static void f (int i) {...}

   public static int g (int i, int j) {...}

}

ユーティリティ・クラスを作るのに最も適した方法はどれですか?

プライベートコンストラクタを使用した方が良いですか?

ユーティリティクラスは抽象クラスとした方が良いですか?

何もしない方が良いですか?

解決方法は?

Javaで完全にステートレスなユーティリティクラスを作るには、このクラスを次のように宣言します。 publicfinal で、インスタンス化を防ぐためにプライベートコンストラクタを持つ。また final キーワードはサブクラス化を防ぎ、実行時の効率を向上させることができる。

このクラスには、すべての static メソッドを宣言してはいけません。 abstract (というのは、そのクラスは具象ではなく、何らかの方法で実装しなければならないことを意味するからです)。

クラスには、提供されるユーティリティのセットに対応する名前を付ける必要があります(分類されていない幅広いユーティリティを提供するクラスであれば、"Util" )。

ネストされたクラスがユーティリティクラスでない限り、クラスはネストされたクラスを含むべきではありません(ただし、この方法は複雑になる可能性があり、可読性が損なわれます)。

クラス内のメソッドには、適切な名前を付ける必要があります。

クラス自身のみが使用するメソッドはprivateにする。

クラスは、非終端または非静的なクラス・フィールドを持たないようにしなければなりません。

また、コードの可読性を高めるために、他のクラスから静的にインポートすることもできます(ただし、これはプロジェクトの複雑さに依存します)。

public final class ExampleUtilities {
    // Example Utility method
    public static int foo(int i, int j) {
        int val;

        //Do stuff

        return val;
    }

    // Example Utility method overloaded
    public static float foo(float i, float j) {
        float val;

        //Do stuff

        return val;
    }

    // Example Utility method calling private method
    public static long bar(int p) {
        return hid(p) * hid(p);
    }

    // Example private method
    private static long hid(int i) {
        return i * 2 + 1;
    }
}

おそらく最も重要なのは、各メソッドのドキュメントが正確で説明的であることでしょう。このクラスのメソッドは頻繁に使用される可能性があり、コードを補完するために質の高いドキュメントを用意するのは良いことです。