网站优化

网站优化

Products

当前位置:首页 > 网站优化 >

子类 builder() 中缺少父类哪些属性?

GG网络技术分享 2025-10-25 11:09 1


深厚入探讨子类Builder中缺失父类属性问题

在用Lombok的@Builder注解时 子类用该注解而父类未用,弄得构建子类时无法访问父类属性。在构建子类的时候,父类的属性不能被获取到。本文将详细解析这一常见问题,并给解决方案。

问题琢磨

在实现builder模式时我们通常用一个基础的builder类来构建对象。只是 有时候我们需要在继承中用builder模式,此时存在一个问题:子类的builder没有继承父类的属性。

比方说 虚假设我们有一个基础的汽车类Car,它有三个属性:make、model、year。我们想要实现一个Tesla类,它是Car的子类,只是它有一个额外的属性:battery。

解决方案一:用静态工厂方法

父类能给一个静态的工厂方法,用于从子类的builder中构建父类实例。这种方法能将父类的属性添加到子类builder中,并在子类的build方法中调用父类的build方法。

解决方案二:用抽象方法继承

另一种解决方法是用抽象方法来实现属性的继承。通过让子类的builder实现该方法,我们能保证属性的继承问题。在TeslaBuilder的build方法中,我们返回了Tesla对象。

实际案例琢磨

class Car {
    private final String make;
    private final String model;
    private final int year;
    // Constructor
    private Car {
        this.make = builder.make;
        this.model = builder.model;
        this.year = builder.year;
    }
    // Builder class
    public static class Builder {
        private final String make;
        private final String model;
        private final int year;
        public Builder {
            this.make = make;
            this.model = model;
            this.year = year;
        }
        public Car build {
            return new Car;
        }
    }
}
class Tesla extends Car {
    private final int battery;
    private Tesla {
        super;
        this.battery = builder.battery;
    }
    public static class TeslaBuilder extends Builder {
        private int battery;
        public TeslaBuilder battery {
            this.battery = battery;
            return this;
        }
        public Tesla build {
            return new Tesla;
        }
    }
}

子类builder缺失父类属性是builder模式中的一种常见问题。本文介绍了两种方法来解决这玩意儿问题:静态工厂方法和抽象方法继承。在实现builder模式时选择哪种方法需要根据实际情况来决定。

欢迎用实际体验验证观点。

标签:

提交需求或反馈

Demand feedback