используя Lombok Builder с абстрактным классом - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть этот абстрактный класс:

public abstract class Hotel {

     protected List<String> defaultValues() {
        return List.of("Geeks", "For", "Geeks");
    }
}

и этот класс lombok, который выходит из абстрактного класса:

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
public class Hostel extends Hotel {         
    private List<String> values = defaultValues();    

    @SuppressWarnings("unused")
    public static class HosteBuilder {

        public Hostel build() {    
            this.values.add("ww");    
            ...
        }
    }    
}

, но я получаю нулевой указатель в строке values.add("ww");

1 Ответ

0 голосов
/ 16 апреля 2020

Класс Builder должен сначала создать новый экземпляр. Кроме того, список, который вы используете, неизменен. Обе эти проблемы были отмечены пользователем Michael. В любом случае, lombok не виноват в этом, поскольку он только добавляет методы, ни один из которых вы не используете в своем примере.

Сначала измените список на изменяемый Тип списка:

return Arrays.asList(new String[]{"Geeks", "For", "Geeks"});

И расширение типа до:

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
public class Hostel extends Hotel {         
    private List<String> values = defaultValues();    

    @SuppressWarnings("unused")
    public static class HosteBuilder {

        public Hostel build() {
            Hostel hostel = new Hostel();
            hostel.values.add("ww");    
            // ...
            return hostel;
        }
    }    
}
...