创建对象使用新的VS

Bunthai Deng :

在执行我的任务,我看到其他开发人员,他们创建使用类@AllArgsConstructor(access = AccessLevel.PRIVATE)这使得类的构造函数私有。然后,他们利用创建一个对象of来代替。
是什么创造两者的区别newof

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章