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

cod*_*erz 2 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我可以使用 来初始化它User user = new User().withFirstName("Tom").withAge(30);user初始化后,我仍然可以通过 来修改它user.withLastName("Bob").withAge(31);

如何利用 Lombok 保存“withXXX”方法?@Builder 不是针对此用例设计的。

Boh*_*ian 5

尝试这个:

\n\n
@Data\n@Builder\n@Accessors(fluent = true) // <\xe2\x80\x94 This is what you want\npublic class User {\n    private final String firstName;\n    private final String lastName;\n    private final int age;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后使用:

\n\n
User user = User.builder()\n    .firstName("foo")\n    .lastName("bar")\n    .age(22)\n    .build();\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后:

\n\n
user.setFirstName("baz").setAge(23); // fluent setters\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n