首页 > 解决方案 > 如何在java中的Builder模式中继承

问题描述

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

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

  1. 产品.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. 电子.java

包装产品;

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

                                     //DEFAULT CONSTRUCTOR NOT AVAILABLE

}

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

标签: inheritancedefault-constructorbuilder-pattern

解决方案


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

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

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


推荐阅读