私がやろうとしているのは、ビルダー パターンを使用するクラス ( ) を作成し、このクラスを必要なオブジェクト内のSquare
内部クラス ( ) として拡張することです ( )。MyCube
DrawMyCube
理解するのが少し複雑な理由から、これらを内部クラス (ローカル変数への参照) として拡張することをお勧めします。
実際の使用例は複雑すぎてここで使用できないため、例をできるだけ単純にしようとしました。
public abstract class Square {
protected Integer length;
protected Integer width;
public abstract static class Builder {
protected Integer length;
protected Integer width;
public abstract Builder length(Integer length);
public abstract Builder width(Integer width);
}
protected Square(Builder builder) {
this.length = builder.length;
this.width = builder.width;
}
}
ここで、これを拡張して使用する必要があります。
public class DrawMyCube {
private String myText;
private Integer height;
private String canvas;
private MyCube myCube;
public DrawMyCube(String canvas) {
this.canvas = canvas;
myCube = new MyCube.Builder().length(10).width(10).text("HolaWorld").build();
}
public void drawRoutine() {
myCube.drawMe(canvas);
}
protected class MyCube extends Square {
protected String text;
public static class Builder extends Square.Builder{
protected String text;
public Square.Builder length(Integer length) {this.length = length; return this;}
public Square.Builder width(Integer width) {this.width = width; return this;}
public Square.Builder text(String text) {this.text = text; return this;}
}
protected MyCube(Builder builder) {
super(builder);
this.text = text;
}
protected void drawMe(String canvas) {
canvas.equals(this);
}
}
}
ただし、問題は内部クラスの静的ビルダーです。
メンバー型 Builder は static と宣言できません。静的型は、静的型または最上位型でのみ宣言できます。
別の方法として、内部クラスMyCube
を通常のクラスとして作成することもできますが、その場合、クラス内の何も参照できないという問題が生じますDrawMyCube
(実際の使用例では、これらのさまざまなものへの参照が多数あります)。