我目前正在使用Builder模式,紧跟在Wikipedia文章 Builder模式
http://en.wikipedia.org/wiki/Builder_pattern中建议的Java实现
这是一个示例代码,说明了我的实现
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; }
}
在我的一些使用此类的应用程序中,我碰巧发现了非常相似的建筑代码,因此我想将其子类化MyPrimitiveObject
,MySophisticatedObject
并将所有重复的代码移入其构造函数中。这就是问题所在。
如何调用超类生成器并将其返回的对象分配为我的实例?
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
extends
MyPrimitiveObject.Builder
,并覆盖其build()
方法。在构建器中具有受保护的构造函数,以 接受 要在其上设置值的实例:
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.
}
}
我目前正在使用Builder模式,密切遵循Wikipedia文章Builder pattern http://en.Wikipedia.org/wiki/builderpattern中建议的Java实现 这是一个示例代码,它将我的实现 我如何调用超类构建器并将其返回的对象分配为我的实例?
所以我刚刚发现了Lombok注释,我喜欢它。尤其是对于集合的注释。 在继承的情况下,我读到为子类创建构建器的最有效方法如下:
问题内容: 我有一个“ ChildClass”类,它扩展了“ ParentClass”类。我不想完全替换父类的构造函数,而是要先调用父类的构造函数,然后再做一些额外的工作。 我相信默认情况下会调用父类的0参数构造函数。这不是我想要的 我需要用参数调用构造函数。这可能吗? 我试过了 但这不起作用,因为您无法修改“ this”。 问题答案: 您可以从子代的构造函数中以“ super”引用父代的构造函数
我正在为即将到来的考试做一些修订,我对对象构造函数中枚举的使用有点困惑。
我是莫基托的新手。假设我有一节这样的课 我正在使用Mockito编写一个JUnit测试,我正在使用构造函数创建类的对象。当我安装类时,是否可以模拟Drew()方法?
问题内容: 我正在尝试创建一个将字段作为参数的构造函数,然后将其放入存储在超类中的字段中。这是我正在使用的代码 在超类中,我用 我有一个访问器方法 我收到一个错误“ 味道在超类中具有私有访问权 ”,但是我认为这无关紧要,因为我正在调用将其返回到字段的访问器方法? 问题答案: 您应该做什么: 在您的超类中添加一个构造函数: 在Crisps类中: 注释 对您的问题的一些评论: “在超类中,我已经用”