私はJavaで何かをモデリングし、Builderパターンを使用しています。多くの場合、いくつかの一般的なメンバーが親に定義されており、親から継承した子メンバーのメンバーが追加されています。次のように例を示します。継承と静的ネストされたJavaクラス
public class Parent {
private Integer age;
static class ParentBuilder {
private Integer age;
public ParentBuilder age(Integer age) {
this.age = age;
return this;
}
}
}
と
public class Child extends Parent {
private Integer height;
static class ChildBuilder extends Parent.ParentBuilder {
private Integer height;
public ChildBuilder height(Integer height) {
this.height = height;
return this;
}
public Child build() {
return new Child(this);
}
}
public static ChildBuilder builder() {
return new ChildBuilder();
}
public Child(ChildBuilder b) {
this.height = b.height;
}
}
私は
Child child = Child.builder()
.age(18)
.height(150)
.build();
ような何かをしようとした場合、私はコンパイル時にエラーが出ます:
Main.java:6: error: cannot find symbol
.height(150)
^
symbol: method height(int)
location: class ParentBuilder
.height(150)
を削除すると.build()
で同じエラーが発生しました。私は静的なネストされたクラスで継承を根本的に誤解しているようです。
Child.builder()
がChildBuilder
を返した場合、そのメソッドがParentBuilder
にないと不平を言っているのはなぜですか?このビルダーパターンと一緒に継承を活用して、共通のメンバーを親や他の子に定義できるようにしようとしているので、この作業を行う方法はありますか?
ため
ChildBuilder
を返します、したがって、なぜcomplationエラーがあります'height'を呼び出そうとしています。 http://stackoverflow.com/questions/21086417/builder-pattern-and-inheritanceまたはhttp://stackoverflow.com/questions/17164375/subclassing-a-java-builder-class – Tunaki私は 'Integer 'の代わりに' int'の代わりに 'int'の代わりに' null:null 'でもよいかb)選択肢がない場合 –
ここでは[tag:inner-classes]はありません。 – EJP