0

Sessionクラスにはコンストラクターがなく、代わりにいくつかの静的メソッドを使用します。getDefaultInstance(Properties p);

getDefaultInstance(Properties p、Authenticator a);

getInstance(Properties p);

getInstance(Properties p、Authenticator a);

上記のすべてのリターンセッション。

設計の観点から、デフォルトの引数なしコンストラクターを呼び出さないようにするためですか?それとも、コンストラクターを使用できない/使用したくない状況が好きなものですか?

4

2 に答える 2

1

コンストラクターに対する静的ファクトリメソッドの2つの重要な利点があります。

  1. ターゲットクラスのサブクラスを返すことができます。
  2. 毎回新しいインスタンスを作成する必要はありません。

JavaMailは最初のオブジェクトを利用しませんが(実際にはSessionはfinalです)、2番目のオブジェクトを使用してgetDefaultInstanceの同じSessionオブジェクトを返します。これは特定のユースケースをサポートするために行われましたが、ここで説明するように、多くの人をつまずかせるのは悪い考えであることが判明しました。

于 2012-12-17T19:34:32.303 に答える
0

ここでいくつかの情報を得ることができます静的ファクトリメソッドとは何ですか?

クラスの場合、メソッド名をまたはSessionに変更するだけで動作を変更できるという利点があります。また、必要に応じてAuthentificatorを提供します。getDefaultInstancegetInstance

于 2012-12-17T17:00:11.957 に答える