在执行我的任务,我看到其他开发人员,他们创建使用类@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)
第一个是好的,但另外两个是冲突的,它解决不了,因为你不能命名构造函数或参数。
使用静态工厂方法允许命名必要的方法:
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(...)
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句