Образец строителя (java). Почему класс Builder публикуется c? - PullRequest
0 голосов
/ 21 февраля 2020

Почему каждый, куда я смотрю, класс внутреннего строителя публикуется c stati c? Разве это не должно быть приватно? 1005 *? Может быть, я чего-то не вижу, но я бы сказал, что будет лучше. Кто-нибудь может мне это объяснить?

@Getter @AllArgsConstructor @ToString
public class CarDto {

private final String make;
private final int seatCount;
private final String type;
private final CarDto carDto;

public static Builder builder(){
    return new Builder();
}


private static class Builder{
    private String make;
    private int seatCount;
    private String type;
    private CarDto carDto;


    public Builder make(String make){
        this.make = make;
        return this;
    }

    public Builder seatCount(int seatCount){
        this.seatCount = seatCount;
        return this;
    }

    public Builder type(String type){
        this.type = type;
        return this;
    }

    public Builder carDto(CarDto carDto){
        this.carDto = carDto;
        return this;
    }

    public CarDto create(){
        return new CarDto(make, seatCount,type,carDto);
    }
}
}

Ответы [ 3 ]

0 голосов
/ 21 февраля 2020

Частный класс Builder был бы довольно бесполезен. Начнем с того, что вы даже не сможете сделать это:

public static Builder builder() {
    return new Builder();
}

, поскольку вы не можете предоставить закрытый класс из метода publi c.

0 голосов
/ 21 февраля 2020

Builder должен быть доступен за пределами вашего class. Иначе как бы вы могли использовать его для создания своих объектов. Вы можете создать фабричный метод stati c, возвращающий вам экземпляр Builder, но сам класс все еще должен быть опубликован c.

0 голосов
/ 21 февраля 2020

Builder должен быть опубликован c, чтобы быть доступным из других классов. Попробуй получить своего строителя, вызвав ваш метод c фабрики CarDto.builder(), иначе - вы не сможете использовать любой из методов построения, таких как seatCount(), ..., create().

...