Инициализация внутренней коллекции Lombok

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

Пример:

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 всегда будет инициализировано хотя бы пустой коллекцией, или мне нужно начать писать утомительные нулевые проверки?


person Michal Krasny    schedule 15.02.2017    source источник


Ответы (1)


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

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

Из Project Lombok (выделено мной): Value

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

person Janar    schedule 15.02.2017
comment
Я почему-то думал, что нельзя объявить методы, генерируемые Ломбоком. - person Michal Krasny; 16.02.2017