Методы Lombok Builder возвращают экземпляр самого класса, а не возвращают класс Builder - PullRequest
0 голосов
/ 17 марта 2019

У меня есть класс 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 ]

3 голосов
/ 17 марта 2019

Попробуйте это:

@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 голос
/ 22 марта 2019

Я пытался найти решение для беглых установщиков, возвращающих новый экземпляр, чтобы экземпляр оставался неизменным, и я нашел Увядание аннотации из экспериментальных функций Lombok в сочетании со Значение аннотацией из стабильногофункции.

Надеюсь, что это может помочь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...