2016-09-07 2 views
0

Используя lombok для проекта, у меня есть ArrayList. Это значение null, потому что оно никогда не инициализируется. Первоначально я инициализировал это в конструкторе, прежде чем решил использовать ломбок для удаления основной части шаблона.Как инициализировать ArrayList с lombok @Builder и @Data

Какой простейший пример заставить его работать?

Пример: при вызове refresh вызывается нулевой указатель после создания построителя (Примечание: я не указал переменные, которые используются в построителе, но parameters не упоминается в построителе, поэтому, возможно, мне нужно что-то сделать с ним).

@Builder 
public @Data class RMF_Objective { 

    private ArrayList<String> parameters; 

    public void refresh(){  
     parameters.clear(); // Clear for now 
    } 
} 

ответ

0

Согласно https://reinhard.codes/2016/07/13/using-lomboks-builder-annotation-with-default-values/ с использованием значений по умолчанию в вашем классе не будет работать.

Вы можете обеспечить минимальную реализацию строитель, содержащий значения по умолчанию, как:

public static class RMF_ObjectiveBuilder{ 
    private ArrayList<String> parameters = new ArrayList<>(); 
} 
1

Самый простой инициализации с застройщиком в Ломбок, как это:

@Builder 
    public @Data class RMF_Objective { 

     private ArrayList<String> parameters; 

     public void refresh() { 
      parameters.clear(); // Clear for now 
      System.out.println("cleared !"); 
     } 

     public static void main(String[] args) { 
      ArrayList<String> list = new ArrayList<>(Arrays.asList("one", "two")); 
      RMF_Objective builtObject = new RMF_ObjectiveBuilder() 
        .parameters(list) 
        .build(); 
      builtObject.refresh(); 
     } 
    } 

В противном случае вы можете также использовать Ломбок @ Сингулярная аннотация, чтобы заставить ее генерировать «сингулярную» версию метода parameters(), беря только одну строку в качестве входного параметра. Например:

@Builder 
public @Data class RMF_ObjectiveSingular { 

    @Singular 
    private List<String> parameters; 

    public void refresh() { 
     parameters.clear(); // Clear for now 
     System.out.println("cleared !"); 
    } 

    public static void main(String[] args) { 
     ArrayList<String> list = new ArrayList<>(Arrays.asList("one", "two")); 
     RMF_ObjectiveSingular builtObject = new RMF_ObjectiveSingularBuilder() 
       .parameter("one") 
       .parameter("two") 
       .build(); 
     builtObject.refresh(); 
    } 
} 

Но если бы я был вами, я бы использовал только аннотацию @ Value's Lombok. Если вам не нужен строитель, проще иметь только конструктор, инициализирующий объект, и Getter, но не Setters. Объекты непременного действия часто более безопасны.

+0

Я думаю, вы имели в виду, что безопаснее иметь только Геттер и нет сеттеров – Tzafrir

+0

исправлено, спасибо @Tzafrir :) –

+0

Не знал о @Singular, исправил проблему, когда я развертывал pojo. –

Смежные вопросы