小编Ara*_*gir的帖子

使用 Lombok 为具有必需和可选属性的类创建构建器

搜索插件以避免样板代码来实现Joshua Bloch构建器模式,我发现了令人惊叹的Lombok 项目,它使您能够通过这样的注释生成构建器:

@Builder
public class Person {
    private String name;
    private String address;
    private String secondAddress;
}

PersonBuilder.builder().name("yourName").address("your Address").build();
Run Code Online (Sandbox Code Playgroud)

如您所见,没有样板代码,您可以Person通过调用提供的静态builder()方法轻松创建一个实例,链接 setter-like-calls 就像它与 JavaBeans-Pattern 一起工作一样,并以调用结束链build()

与构建器模式相比,JavaBeans-Pattern 的缺点之一是(来自Effective Java):

由于构造被拆分为多个调用,因此JavaBean 在其构造过程中可能处于不一致的状态

假设在上面的示例中,前两个属性 name 和 address 是构造 Person 实例所必需的,Lombok 实现构建器模式的方式使开发人员能够拆分/缩短构造并使用可能不一致的实例执行某些操作Person, 像这样:

Person p = PersonBuilder.builder().name("yourName").build();
...
System.out.println(p.getAddress());
...
p.setAddress("your address");
Run Code Online (Sandbox Code Playgroud)

Joshua Bloch的解决方案更喜欢使用强制属性作为参数的构建器方法,这样就不可能将构造拆分到多个调用中,如第 2 条:当面对许多构造函数参数时考虑构建器

我的问题是: 是否有任何方便的方法,例如 @Builder 的注释参数或属性级别上的 Springs @Required 或 …

java builder lombok

5
推荐指数
2
解决办法
5650
查看次数

标签 统计

builder ×1

java ×1

lombok ×1