Должен ли lombok buiilder на конструкторе быть только один? - PullRequest
0 голосов
/ 15 октября 2019

Я думал, что мог бы переопределить конструкторы в конструкторе с помощью аргументов, как обычные конструкторы Java.

Но IDE IntelliSense не предлагает методы, которые я хочу.

Должен ли lombok buiilder на конструкторебыть только одним?

Вот мой код:

  1. Строители
    @Builder(builderMethodName = "builderByDto")
    public SourceInfo(SourceInfoDto sourceInfoDto) {
        this.sourceTitle    = sourceInfoDto.getSourceTitle();
        this.isbn           = sourceInfoDto.getIsbn();
        this.eissn          = sourceInfoDto.getEissn();
        this.issn           = sourceInfoDto.getIssn();
        this.volume         = sourceInfoDto.getVolume();
        this.pages          = sourceInfoDto.getPages();
        this.issue          = sourceInfoDto.getIssue();
        this.publishedYear  = sourceInfoDto.getPublishedYear();
        this.publishedDate  = sourceInfoDto.getPublishedDate();
    }

    @Builder(builderMethodName = "builderByLiteRecord")
    public SourceInfo(LiteRecordDto liteRecordDto) {
        Map<String, String> source = liteRecordDto.getSource();

        this.sourceTitle    = source.get("sourceTitle");
        this.isbn           = source.get("isbn");
        this.eissn          = source.get("eissn");
        this.issn           = source.get("issn");
        this.volume         = source.get("volume");
        this.pages          = source.get("pages");
        this.issue          = source.get("issue");
        this.publishedYear  = source.get("publishedYear");
        this.publishedDate  = source.get("publishedDate");
    }
Инициация
    @Builder
    public Paper(PaperDto paperDto) {
        ...
        this.sourceInfo     = SourceInfo.builderByDto()
                .sourceInfoDto(paperDto.getSourceInfo()).build();  // Error
        ...
    }

1 Ответ

0 голосов
/ 15 октября 2019

Если вам нужны два конструктора на основе конструктора, вам также нужны два отдельных класса компоновщиков. Вы можете настроить класс построителя следующим образом:

@Builder(builderClassName = "BuilderByLiteRecord", builderMethodName = "builderByLiteRecord")
public SourceInfo(LiteRecordDto liteRecordDto) {
...

PS: По крайней мере из того, что вы показали в своем примере, шаблон строителя кажется здесь не совсем подходящим, по крайней мере, не для конструкторов. Я бы поставил @Builder только на класс, чтобы вы получили класс строителя со всеми полями. Затем используйте два статических метода, каждый из которых принимает один из ваших классов DTO в качестве параметра и возвращает построитель, заполненный данными из DTO.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...