Class.getInstance()
の呼び出しはnew Class()
と同等ですか?後者に対してコンストラクターが呼び出されることは知っていますが、getInstance()
はどうですか?ありがとう。
Class#getInstance()
のようなメソッドはありません。あなたはおそらくそれを Class#newInstance()
と混同しているでしょう。はい、これはdefaultコンストラクターのnew
とまったく同じです。これがその抜粋です Javadoc :
この
Class
オブジェクトで表されるクラスの新しいインスタンスを作成します。 クラスは、空の引数リストを持つnew
式のようにインスタンス化されます。クラスは、まだ初期化されていない場合は初期化されます。 。
コードでは、
_Object instance = Object.class.newInstance();
_
と同じです
_Object instance = new Object();
_
Class#newInstance()
呼び出しは、実際には Factoryメソッド パターンに従います。
更新:他の回答を見て、あなたの質問にはあいまいさがいくつかあることに気づきました。さて、getInstance()
という名前のメソッド実際にが使用される場所は、しばしば Abstract Factory パターン。 「内部」でnew
またはClass#newInstance()
を使用して、対象のインスタンスを作成して返します。知る必要がないかもしれない具体的な実装に関するすべての詳細を隠すだけです。
さらに、このメソッド名は、 Singleton パターンの一部の(ほとんどが自家製の)実装でもよく見られます。
絶対に(通常)そうではありません。
getInstance
は、Javaの シングルトンパターン でよく使用される静的メソッドです。 new
keywordは、実際に新しいオブジェクトを作成します。 new
が返すオブジェクトを実際に作成するには、ある時点でgetInstance
が必要です(ただし、新しいオブジェクトをインスタンス化する方法は他にもいくつかあります)。
抽象クラスのコンテキストでは、getInstance()
メソッドは ファクトリメソッドパターン を表す場合があります。例は抽象 Calendar
クラスで、静的ファクトリメソッドと具象サブクラスが含まれています。
Newキーワードを使用して抽象クラスをインスタンス化できないため、一部の抽象クラスにはgetInstance()メソッドがあります。
はい、これはシングルトンパターンでよく使用されます。クラスのインスタンスが1つだけ必要な場合に使用されます。このメソッドの実装では、クラスのアクティブなインスタンスが存在するかどうかを確認し、新しいインスタンスを作成する代わりにそれを返す可能性があるため、getInstance()を使用することをお勧めします。メモリを節約できる場合があります。この例のように:
public static DaoMappingManager getInstance() {
DaoProperties daoProperties = null;
try {
daoProperties = (DaoProperties) DaoProperties.getInstance();
} catch (PropertyException e) {
e.printStackTrace();
}
return getInstance(daoProperties);
}
public static DaoMappingManager getInstance(DaoProperties daoProperties) {
if (instance == null) {
instance = new DaoMappingManager(daoProperties);
}
return instance;
}
開始の場合:newInstance()
は_static method
_です。これは、新しいクラスを直接作成せずにアクセスできることを意味します。そして、そのクラス自体を「必要な初期化を使用して」(内部のnew myClass()
を介して)作成します。これは、静的メソッドごとに異なる初期化でクラスを作成するさまざまなニーズに合わせて、いくつかのnewInstance
メソッド(newInstance4usage1、newInstance4usage2、...)を追加できることを意味します。これは、クラスのユーザー(最終プログラマー)が心配することなく非常に快適にクラスを作成するのに役立つ場合があります。
これは、initプロセスが複雑であるか、重要なレベルまたは通常のレベルがある場合に非常に役立ちます。このメソッドは、new
キーワードによるクラスの作成を妨げません。
私はそれが好きです!
応答が遅いので失礼します。携帯電話で入力しています。