不変になろうとする次のクラスがあるとしましょう
public class Computation {
private final Operation operation;
private final double epsilon;
public Computation(Operation operation) {
this.operation = operation;
//Default value
epsilon = 0.01;
}
public Computation(Operation operation double epsilon) {
this(operation);
//Won't compile as epsilon is final and is set by the other constructor
this.epsilon = epsilon;
}
}
そして、質問のために、このクラスにビルダーを使用したくないと仮定しましょう (問題を解決します)。
質問は次のとおりです。
イプシロンの最終修飾子を削除せずに、2 つのコンストラクターを保持せずに、この動作を実現する方法はありますか?
つまり、次のようなことをしなくても
public class Computation {
private final Operation operation;
private final double epsilon;
public Computation(Operation operation Double epsilon) {
this(operation);
this.epsilon = (epsilon == null) ? 0.01 : epsilon;
}
}
ビルダーを使用せずに
public class Computation {
private final Operation operation;
private final double epsilon;
private Computation(Builder builder) {
this.operation = builder.operation;
this.epsilon = builder.epsilon;
}
public static class Builder {
private final Operation operation;
//Default value
private double epsilon = 0.01;
public Builder(Operation operation) {
this.operation = operation;
}
public Builder epsilon(double epsilon) {
this.epsilon = epsilon;
return this;
}
public Computation build() {
return new Computation(this);
}
}