I実装に基づいてパターンこのanswer I次asbtract設定があります。ビルダーパターン
public abstract class AbstractConfig {
public static abstract class Builder<B extends Builder<B>> {
private int calories = 0;
public Builder() {
}
public B setCalories(int calories) {
this.calories = calories;
return (B) this;
}
public abstract AbstractConfig build();
}
private int calories = 0;
protected AbstractConfig(final Builder builder) {
calories = builder.calories;
}
}
そして、私は、以下の具体的な設定があります。
public class DialogConfig extends AbstractConfig {
public static class DialogConfigBuilder<B extends DialogConfigBuilder<B>> extends Builder<B> {
private double width;
private double height;
public DialogConfigBuilder() {
//does nothing.
}
public B setWidth(final double value) {
width = value;
return (B) this;
}
public B setHeight(final double value) {
height = value;
return (B) this;
}
public DialogConfig build() {
return new DialogConfig(this);
}
}
private final double width;
private final double height;
protected DialogConfig(final DialogConfigBuilder builder) {
super(builder);
width = builder.width;
height = builder.height;
}
public double getWidth() {
return width;
}
public double getHeight() {
return height;
}
}
そして、これがあるとどのように使用するのですか
DialogConfig config = new DialogConfig.DialogConfigBuilder()
.setWidth(0)
.setCalories(0)
.setHeight(0) //X LINE
.build();
X l私は得る - シンボルメソッドsetHeightを見つけることができません。私の間違いは何ですか?
EDIT - 私はDialogConfigなどを拡張する必要があるExtendedDialogConfigを持っています。他のサブクラスもあるはずです。
あなたは 'B'が'ビルダー 'に解決することを意味する生の型を使用しています。クラス宣言を 'class DialogConfigBuilder extends Builder'に変更してください。 –
shmosel
このソリューションは[生の種類を使用する](https://stackoverflow.com/questions/17164375/subclassing-a-java-builder-class/17165079#comment59589591_17165079)としてコピーすることには注意が必要です。 – shmosel
@shmoselあなたのコメントよりも。しかし、 'DialogConfigBuilder extends Builder'クラスに変更すると、SuperDialogConfigでDialogConfigを拡張できますか?私はあなたのアドバイスに従うと、setCalories()はDialogConfigを返しますが、SuperDialogConfigは返しません。 –