【问题标题】:How to inherit in Builder Pattern in java如何在java中的Builder模式中继承
【发布时间】:2019-11-23 04:57:49
【问题描述】:

我想从包含 Builder 类的父类继承一个类,但在父类中给出编译错误“默认构造函数不可用”。

我尝试为具有空值的父类构建默认构造函数。然而根本没有调用默认构造函数,它将所有值初始化为 null。

  1. Product.java

包装产品; 公共类产品{

private final String id;          //required
private final String description; //required
private final double price;       //required

public enum Category{
    Electronics,
    Clothing,
    ShowCart
}

private Products(ProductBuilder builder) {
    this.id = builder.id;
    this.description = builder.description;
    this.price = builder.price;
}


public String getID() {
    return id;
}

public String getDescription() {
    return description;
}

public double getPrice() {
    return price;
}


public static class ProductBuilder {


    private final String id;          //required
    private final String description; //required
    private final double price;       //required

    public ProductBuilder(String id, String description, double price)
        {
            this.id = id;
            this.description = description;
            this.price = price;
        }


    public Products build(){

        Products prod = new Products(this);
        return prod;
    }

}

}

  1. Electronic.java

包装产品;

public class Electronic extends Products{ //编译错误

                                     //DEFAULT CONSTRUCTOR NOT AVAILABLE

}

我想在不引入默认构造函数的情况下解决问题,并且不违反 BUILDER PATTERN

【问题讨论】:

标签: inheritance default-constructor builder-pattern


【解决方案1】:

您需要向 Electronic 添加一个构造函数,并且它必须调用其基类的构造函数。这是 Java 中继承类的标准过程。

public class Electronic extends Products {
  public Electronic(ProductBuilder builder) {
    super(builder);
  }
}

如果这没有意义,请问自己:基类需要一个 ProductBuilder。如果没有这个新的构造函数,基类如何获得它的 ProductBuilder?

【讨论】:

    猜你喜欢
    • 2018-02-06
    • 2013-06-14
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多