inheritance - 如何在java中的Builder模式中继承
问题描述
我想从包含 Builder 类的 Parent 类继承一个类,但在父类中给出编译错误“默认构造函数不可用”。
我尝试为具有空值的父类构建默认构造函数。然而,根本没有调用默认构造函数,它将所有值初始化为 null。
- 产品.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;
}
}
}
- 电子.java
包装产品;
public class Electronic extends Products{ //编译错误
//DEFAULT CONSTRUCTOR NOT AVAILABLE
}
我想在不引入默认构造函数且不违反 BUILDER PATTERN 的情况下解决问题
解决方案
您需要向 Electronic 添加一个构造函数,并且它必须调用其基类的构造函数。这是 Java 中继承类的标准过程。
public class Electronic extends Products {
public Electronic(ProductBuilder builder) {
super(builder);
}
}
如果这没有意义,请问自己:基类需要一个 ProductBuilder。如果没有这个新的构造函数,基类如何获得它的 ProductBuilder?
推荐阅读
- multithreading - 由 Cantaloupe-Melon 大学的科学家设计的 FastPath 锁定算法是否正确?
- react-native - 当孩子用 Swipeable 包裹时,FlatList 或 ScrollView 不起作用
- laravel - Laravel 查询存在的几种
- java - 最近开始学习Java,我想创建一个计算点击次数的应用程序
- ios - 使用类和 swift 初始化程序快速编码、理解并更好地改进我的代码
- ajax - 数据不通过 formData 传输
- database - 如何为flutter windows应用程序实现数据库查询?
- javascript - 动态帮助命令 discord.js
- php - 如何将css存储到mysql数据库中并回调它以显示在html上
- java - 如果条件为真,一个方法是否可以阻止另一个方法被调用?