Установка нулевого или пустого для @singular списка в lombok - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть список как

@Value
@Builder(toBuilder = true)
class Demo {

    private BigInteger id; 

    @Singular
    private List<String> name;
}

У меня есть некоторые данные, добавленные в список имен.Теперь я хочу установить его пустым или нулевым.Как мне этого добиться?Насколько я понимаю, если я использую аннотацию @Singular, это делает список неизменным.

Я использую Java с Lombok.

Ответы [ 2 ]

3 голосов
/ 25 сентября 2019

Насколько я понимаю, если я использую аннотацию @Singular, это делает список неизменным.

Это делает список в экземпляре Demo неизменным.Это не делает список неизменным в компоновщике;он просто меняет API компоновщика.

Из документации :

с аннотацией @Singular, lombok будет рассматривать этот узел компоновщика как коллекциюи генерирует 2 метода «сумматора» вместо метода «сеттера»

Что касается очистки списка,

Также генерируется метод «очистки».

В вашем случае, clearNames (поле списка должно называться names, а не name, в противном случае Lombok жалуется).


Если вам нужен изменяемыйНапример, не используйте @Singular

1 голос
/ 25 сентября 2019

Насколько я понимаю, если я использую аннотацию @Singular, это делает список неизменным

Нет, Lambok просто создает метод для одного элемента add, для вашего класса (я настоятельно рекомендую изменитьимя к именам).Вам просто нужно вызвать метод "clearNames"

@Value
@Builder(toBuilder = true)
class Demo {

    private BigInteger id; 

    @Singular
    private List<String> names;
}

Lambok генерировать следующий строитель

public static class UserBuilder {
       private BigInteger id; 
       private ArrayList<String> names;

       UserBuilder() {
       }    


       public User.UserBuilder name(String name) {
           if (this.names == null) this.names = new ArrayList<String>();
           this.names.add(name);
           return this;
       }

       public User.UserBuilder names(Collection<? extends String> names) {
           if (this.names == null) this.names = new ArrayList<String>();
           this.names.addAll(names);
           return this;
       }

       public User.UserBuilder clearNames() {
           if (this.names != null)
               this.names.clear();

           return this;
       }

       ...    
       public User build() {
           ...
       }

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