私のタスクを実行する時には、私は他の開発者を見て、彼らが使用してクラスを作成@AllArgsConstructor(access = AccessLevel.PRIVATE)
クラスのコンストラクタのプライベートを作りました。その後、彼らが使用してオブジェクトを作成するof
代わりに。
使用して作成したとの違いは何であるnew
とはof
?
A a = new A();
A a = A.of();
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@EqualsAndHashCode
public class A
{
@NonNull
String data;
public static A of()
{
return new A();
}
}
時間が経つにつれて、それはあなたが呼び出しのパラメータに名前を付けていないので、オプションの値が同じ型である場合、様々な方法を使用してオブジェクトを作成することは困難であることが明らかになってきました。
ワン(かなりダム)の例は以下のようになりPerson
、単に姓または名前を指定できる場合がありますクラス、。その場合には、次のコンストラクタでは機能しません。
Person(String firstName, String lastName)
Person(String firstName)
Person(String lastName)
最初のものは結構ですが、他の2つは競合している、とあなたは、コンストラクタまたはパラメータを指定することはできませんので、それは、解決できません。
staticファクトリメソッドを使用すると、必要に応じてメソッドを命名することができます:
Person of(String firstName, String lastName)
Person ofFirstName(String firstName)
Person ofLastName(String lastName)
一般的にはof
、あなたがそれに名前を付ける必要がないときに使用されます。それはまだあなたも持っているかもしれません例えば、同様のコンストラクタをオーバーロードすることはできで、オーバーロードすることができます。
Person of(String firstName, String lastName, int age)
クラス用として頻繁に使用されていないが、必要があると認めるときは、ファクトリメソッドはまた、サブクラスを返すことがあります。
インターフェイスのために、そのようなファクトリメソッドは、インターフェースを実装するオブジェクトをインスタンス化するのではなく、異なるクラスのファクトリメソッドを有するための素晴らしい利便性です。
静的メソッドをインタフェースする前に、JDKが実装Arrays.asList(...)
明示的に与えられたオブジェクトのリストを作成します。言語へのインターフェイスの静的メソッドの導入により、その方法について(も)上に実装されるList
インタフェース自体としてList.of(...)
。
また、彼らはまたのための便利なメソッドを追加Set.of(...)
してMap.of(...)
。