Lombok构建器方法返回类本身的实例,而不是返回构建器类

时间:2019-03-17 19:26:00

标签: java lombok

我有一堂课User

public class User {
    private String firstName;
    private String lastName;
    private int age;

    public User withFirstName(String firstName) {
        this.firstName = firstName;
        return this;
    }

    public User withLastName(String lastName) {
        this.lastName = lastName;
        return this;
    }

    public User withAge(int age) {
        this.age = age;
        return this;
    }
}

所以我可以使用User user = new User().withFirstName("Tom").withAge(30);对其进行初始化,并且在初始化user之后,我仍然可以通过user.lastName("Bob").age(31);对其进行修改。

如何利用Lombok保存“ withXXX”方法? @Builder不适用于此用例。

2 个答案:

答案 0 :(得分:3)

尝试一下:

@Data
@Builder
@Accessors(fluent = true) // <— This is what you want
public class User {
    private final String firstName;
    private final String lastName;
    private final int age;
}

然后使用:

User user = User.builder()
    .firstName("foo")
    .lastName("bar")
    .age(22)
    .build();

后来:

user.setFirstName("baz").setAge(23); // fluent setters

请注意如何通过使所有字段为User来使final不可变(最佳实践)。如果需要可变性,请删除final关键字。

答案 1 :(得分:1)

我试图为流利的设置者返回新实例找到一个解决方案,以使该实例保持不变,并且我从Lombok实验功能中找到了Wither注释,并从稳定特性中找到了Value注释。

希望它会有所帮助!