gpt4 book ai didi

java - 在子类的构造函数中使用构建器模式

转载 作者:搜寻专家 更新时间:2023-10-31 19:48:31 24 4
gpt4 key购买 nike

我目前正在使用构建器模式,密切关注维基百科文章构建器模式中建议的 Java 实现 http://en.wikipedia.org/wiki/Builder_pattern

这是一个示例代码,说明了我的实现

public class MyPrimitiveObject {
private String identifier="unknown";
public static class Builder {
private final MyPrimitiveObject obj = new MyPrimitiveObject();
public MyPrimitiveObject build() { return obj; }
public Builder setidentifier (String val) {
obj.identifier = val;
return this;
}
}
public static Builder createBuilder() { return new Builder(); }
@Override public String toString() { return "ID: "+identifier; }
}

在我的一些使用这个类的应用程序中,我碰巧发现非常相似的构建代码,所以我想在 MySophisticatedObject 中继承 MyPrimitiveObject 并移动我所有重复的代码进入它的构造函数..这就是问题所在。

我如何调用父类(super class) Builder 并将其返回的对象指定为我的实例?

public class MySophisticatedObject extends MyPrimitiveObject {
private String description;
public MySophisticatedObject (String someDescription) {
// this should be the returned object from build() !!
Builder().setidentifier(generateUUID()).build()
description = someDescription;
}
}

最佳答案

您可能需要考虑拥有一个嵌套的 MySophisticatedObject.Builder,它扩展了 MyPrimitiveObject.Builder,并覆盖了它的 build() 方法。在构建器中有一个 protected 构造函数来接受要设置值的实例:

public class MyPrimitiveObject {
private String identifier="unknown";
public static class Builder {
private final MyPrimitiveObject obj;
public MyPrimitiveObject build() { return obj; }
public Builder setidentifier (String val) {
obj.identifier = val;
return this;
}

public Builder() {
this(new MyPrimitiveObject());
}

public Builder(MyPrimitiveObject obj) {
this.obj = obj;
}
}
...
}

public class MySophisticatedObject extends MyPrimitiveObject {
private String description;

public static class Builder extends MyPrimitiveObject.Builder {
private final MySophisticatedObject obj;
public Builder() {
this(new MySophisticatedObject());
super.setIdentifier(generateUUID());
}
public Builder(MySophisticatedObject obj) {
super(obj);
this.obj = obj;
}

public MySophisticatedObject build() {
return obj;
}

// Add code to set the description etc.
}
}

关于java - 在子类的构造函数中使用构建器模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10092458/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com