我想以joshua bloch的方式实现构建器模式,但我也使用jackson的objectMapper将一个对象转换为另一个对象,内部使用setter方法设置值。
将这两种课程都安排在一个班级是不错的做法?如果不是,我怎样才能实现两全其美?
答案 0 :(得分:2)
我从未尝试过这个,但显然杰克逊2.x支持构建器模式
http://wiki.fasterxml.com/JacksonFeatureBuilderPattern
@JsonDeserialize(builder=ValueBuilder.class)
public class Value {
private final int x, y;
protected Value(int x, int y) {
this.x = x;
this.y = y;
}
}
public class ValueBuilder {
private int x, y;
// can use @JsonCreator to use non-default ctor, inject values etc
public ValueBuilder() { }
// if name is "withXxx", works as is: otherwise use @JsonProperty("x") or @JsonSetter("x")!
public ValueBuilder withX(int x) {
this.x = x;
return this; // or, construct new instance, return that
}
public ValueBuilder withY(int y) {
this.y = y;
return this;
}
public Value build() {
return new Value(x, y);
}
}
答案 1 :(得分:1)
这两种结构都有不同的用途。
这些都是完全不同的用例,这些用例在使用方面完全不同。所以我认为他们不应该发生冲突。
唯一必须注意的是,如果你已经实现了两者,你应该尽量避免在任何地方使用setter。你应该只坚持建设者。因此,根据我的说法,同时使用两者都应该没有任何问题。
希望这有帮助。
祝你好运
答案 2 :(得分:0)
这是将一个对象从另一个对象复制的做法:
public class Contact {
private String firstName;
private String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public void clone(Contact c) {
setFirstName(c.getFirstName());
setLastName(c.getLastName());
}
}