33

プライベート コンストラクターが Java でどのように役立つかを知りたいです。Javaでプライベートコンストラクタを使用するさまざまな方法は何ですか?

4

11 に答える 11

42

クラスのインスタンス化を制限するために、プライベートコンストラクターはもちろんオフです。

実際、private コンストラクターの適切な使用法は、Singleton パターンにあります。これが例です

public class ClassicSingleton {
   private static ClassicSingleton instance = null;
   private ClassicSingleton() {
      // Exists only to defeat instantiation.
   }
   public static ClassicSingleton getInstance() {
      if(instance == null) {
         instance = new ClassicSingleton();
      }
      return instance;
   }
}

このようにして、クラスのインスタンスを 1 つだけアクティブにすることができます。

その他の用途として、静的メソッドのみを含むユーティリティ クラスを作成することもできます。

より多くの分析のために、他のスタックオーバーフローの回答を調べることができます

Javaのコンストラクタはプライベートにできますか?

クラスでコンストラクターをプライベートにすることの用途は何ですか?

プライベート コンストラクター

于 2013-06-27T12:15:15.823 に答える
9

他の回答が述べたように、一般的な用途には、シングルトンパターン、内部コンストラクターチェーン、およびもう1つが含まれます。

Java は、(たとえば) C# で「静的クラス」と呼ばれるもの、つまりユーティリティ クラスをサポートしていません。ユーティリティ クラスは、静的メンバーのみを含むことになっているヘルパー クラスです。(MathおよびSystemJava ではそのようなケースです。) それらをインスタンス化することは、どのような方法であっても意味がありません。

C# では、クラスを static にすると、暗黙的に final/sealed と abstract の両方になります。Java にはそのようなキーワードはなく、クラスを finalおよびabstractにすることはできません。したがって、そのようなユーティリティ クラスがある場合は、それを final にして、決して呼び出されないプライベート コンストラクターを指定します。

于 2013-06-27T12:21:12.383 に答える
8

プライベート コンストラクターは、このクラスを外部から初期化できないようにする場合に使用されます。
ユース

ケース 1:シントン クラスを作成する場合

public class SingletonClass {

    public static SingletonClass singletonClass;

    private SingletonClass() {
    }

    public static SingletonClass getInstance() {
        if(singletonClass == null) {
            singletonClass = new SingletonClass();
        }
        return singletonClass;
    }
}

この場合、getInstance メソッドによって初期化のみが行われます。外部で SingletonClass 形式の Object を作成することはできません。



ケース 2: util クラスのようにオブジェクトのインスタンスが必要ない場合

public final class Util {

    private Util() {
    }
}

util クラスではすべてのメソッドが静的であるため、そのオブジェクトを作成する必要がないため、その場合はプライベート コンストラクターが使用されます

于 2013-06-27T12:14:39.213 に答える
5

プライベート コンストラクターを使用すると、オブジェクトの「外部」によって作成されることがなくなります。これは、クラスのインスタンスが 1 つしか存在しないようにするシングルトンパターンなどでよく使用されます。

このリンクには、いくつかの適切な説明もあります...

于 2013-06-27T12:13:51.640 に答える
1

私見いくつかの使用法は

  1. シングルトンで
  2. 別のコンストラクターから..
于 2013-06-27T12:14:14.040 に答える
1

クラスのユーザーがクラスを直接インスタンス化するのではなく、便利な静的メソッドを代わりに使用して、非常に工夫されたビルダーの例を使用する場合があります。

public FooBuilder {

    private FooBuilder(FooBar bar) {
        ...
    }

    public static FooBuilder using(FooBar bar) {
        return new FooBuilder(bar);
    }

}

次に、静的メソッドを呼び出して使用します。

FooBuilder.using(bar) // further chained methods etc...
于 2013-06-27T12:23:43.697 に答える
0

ここでは、プライベート コンストラクターの使用例をいくつか示します。

  1. シングルトン パターンを設計する機能 (オブジェクトの 1 つのインスタンスのみがすべてのオブジェクト間で共有されます)。

2.インスタンス作成数を制限する。

3.サブクラス化を防ぐため。

于 2020-11-20T09:33:56.273 に答える