プライベート コンストラクターが Java でどのように役立つかを知りたいです。Javaでプライベートコンストラクタを使用するさまざまな方法は何ですか?
11 に答える
クラスのインスタンス化を制限するために、プライベートコンストラクターはもちろんオフです。
実際、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 つだけアクティブにすることができます。
その他の用途として、静的メソッドのみを含むユーティリティ クラスを作成することもできます。
より多くの分析のために、他のスタックオーバーフローの回答を調べることができます
他の回答が述べたように、一般的な用途には、シングルトンパターン、内部コンストラクターチェーン、およびもう1つが含まれます。
Java は、(たとえば) C# で「静的クラス」と呼ばれるもの、つまりユーティリティ クラスをサポートしていません。ユーティリティ クラスは、静的メンバーのみを含むことになっているヘルパー クラスです。(Math
およびSystem
Java ではそのようなケースです。) それらをインスタンス化することは、どのような方法であっても意味がありません。
C# では、クラスを static にすると、暗黙的に final/sealed と abstract の両方になります。Java にはそのようなキーワードはなく、クラスを finalおよびabstractにすることはできません。したがって、そのようなユーティリティ クラスがある場合は、それを final にして、決して呼び出されないプライベート コンストラクターを指定します。
プライベート コンストラクターは、このクラスを外部から初期化できないようにする場合に使用されます。
ユース
ケース 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 クラスではすべてのメソッドが静的であるため、そのオブジェクトを作成する必要がないため、その場合はプライベート コンストラクターが使用されます
私見いくつかの使用法は
- シングルトンで
- 別のコンストラクターから..
クラスのユーザーがクラスを直接インスタンス化するのではなく、便利な静的メソッドを代わりに使用して、非常に工夫されたビルダーの例を使用する場合があります。
public FooBuilder {
private FooBuilder(FooBar bar) {
...
}
public static FooBuilder using(FooBar bar) {
return new FooBuilder(bar);
}
}
次に、静的メソッドを呼び出して使用します。
FooBuilder.using(bar) // further chained methods etc...
ここでは、プライベート コンストラクターの使用例をいくつか示します。
- シングルトン パターンを設計する機能 (オブジェクトの 1 つのインスタンスのみがすべてのオブジェクト間で共有されます)。
2.インスタンス作成数を制限する。
3.サブクラス化を防ぐため。