Почему @Data и @Builder не работают вместе - PullRequest
1 голос
/ 07 ноября 2019

У меня есть этот простой класс

public class ErrorDetails {
    private String param = null;
    private String moreInfo = null;
    private String reason = null;
     ...
}

После рефакторинга я добавил @Data и @Builder, но все экземпляры больше не работают

ErrorDetails errorDetails = new ErrorDetails();

«ErrorDetails (java.lang.String, java.lang.String, java.lang.String)» не является общедоступным в «com.nordea.openbanking.payments.common.ndf.client.model.error.ErrorDetails». Нельзя получить доступ извне пакета

Если я удалил @Builder, то он будет работать нормально. Почему я не могу использовать @Data и @Builder вместе?

Ответы [ 2 ]

4 голосов
/ 07 ноября 2019

Ломбока @Builder должен иметь @AllArgsConstructor, чтобы работать

Добавление также @AllArgsConstructor должно сделать

Под капотом этопостроить все поля, используя конструктор со всеми полями

, применяя @Builder к классу, как если бы вы добавили @AllArgsConstructor(access = AccessLevel.PACKAGE) к классу и применили к нему аннотацию @Builderвсе-арг-конструктор. Это работает, только если вы сами не написали никаких явных конструкторов.

2 голосов
/ 07 ноября 2019

Полная конфигурация должна быть:

@Data
@Builder(toBuilder = true)
@AllArgsConstructor
@NoArgsConstructor
class ErrorDetails {
    private String param; // no need to initiate with null
    private String moreInfo;
    private String reason;
}
...