2017-02-15 11 views
1

Я использую аннотацию Lombok @Value. Можно ли как-то обеспечить, чтобы внутренние коллекции никогда не были пустыми?Инициализация внутренней коллекции Lombok

Пример:

package com.testapp; 

import lombok.Value; 
import lombok.experimental.Wither; 

import java.util.List; 

@Value 
@Wither 
public final class ClassWithList { 

    private final List<String> list; 

    public void printList() { 
     list.forEach(System.out::println); 
    } 

} 

Это будет бросать NullPointerException если list является недействительным. Моя нынешняя стратегия заключалась в том, чтобы никогда не позволять, чтобы внутренняя коллекция могла быть нулевой, она была дезинфицирована в конструкторе (сеттер, строитель ...). Однако в этом случае конструктор автоматически создается Lombok. Есть ли способ, как обеспечить, чтобы свойство list всегда инициализировалось, по крайней мере, до пустой коллекции, или мне нужно начать писать утомительные проверки нуля?

ответ

3

Вы можете переопределить конструктор, если существует вероятность того, что список вы передаете в нуль является

public ClassWithList(List<String> aList) { 
    this.list = aList == null ? new ArrayList<>() : aList; 
} 

Из проекта Ломбок (курсив мой): Value

@value представляет собой сокращенную : final @ToString @EqualsAndHashCode @AllArgsConstructor @FieldDefaults (makeFinal = true, level = AccessLevel.PRIVATE) @Getter, за исключением того, что явно включает в себя реализацию любого из соответствующих методов просто означает, что часть не будет сгенерирована и не будет выдано предупреждение

+0

По какой-то причине я думал, что невозможно объявить методы, которые генерируются Ломбоком. – Michal