Конструктор Lombok переопределяет конструктор по умолчанию - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть следующий сценарий

Родительский класс:

     @Getter
     @Setter
     public abstract class Record {
        private String recordId;
    }

Дочерний класс:

@Getter
@Setter
@ToString
@AllArgsConstructor
@Builder
public  class SRecord extends Record {
    private static final String RECORD_ID = "REC001";
    private String street;
    private String city;

    public SRecord(){
        setRecordId(RECORD_ID); //value of recordId being set
    }
}

Я устанавливал значение recordId из дочерних классов, используяконструктор по умолчанию и изначально не использовал lombok Builder.В конце концов я решил использовать здесь Builder, но проблема в том, что lombok Builder переопределяет мой конструктор по умолчанию, поэтому значение никогда не устанавливается.

Любые предложения, как я могу поставить любой хук, чтобы lombok Builder использовал мой конструктор по умолчанию?

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Я думаю, вам следует создать конструктор в базовом классе:

@Getter
@Setter
public abstract class Record {

    private String recordId;

    public Record(String recordId) {
        this.recordId = recordId;
    }
}

Затем использовать его в конструкторе унаследованного класса:

@Getter
@Setter   
@Builder
public class SRecord extends Record {

    private static final String RECORD_ID = "REC001";

    private String street;
    private String city;  

    public SRecord(String street, String city) {
        super(RECORD_ID); 
        this.street = street;
        this.city = city;
    }
}

PS Если вы хотите использоватьLombok Builder с наследованием вы можете использовать эту технику .

0 голосов
/ 26 ноября 2018

Lombok's @Builder просто не использует конструктор по умолчанию.Он передает свои значения конструктору all-args, чтобы этот конструктор мог заполнить новый экземпляр этими значениями.@Builder не использует сеттеры или прямой доступ к полям для этого.Поэтому ваш конструктор по умолчанию просто игнорируется @Builder.

Что вы можете сделать, так это написать свой собственный конструктор all-args.В нем вы устанавливаете свое значение для recordId и назначаете остальные поля из параметров.

...