私は、ネストされた静的クラスのインスタンスを作成するときはいつでも、次のようにする必要があると信じていました。
Outerclass.StaticNestedClass myObject = new Outerclass.StaticNestedClass();
以下のコード (関連性がないと思われるコードの一部は省略しています) では、囲んでいるクラス名を使用していません。GeneratedData は、クラス ObjectBuilder の静的なネストされたクラスです。表示されない理由:
ObjectBuilder.GeneratedData = ObjectBuilder.createMallet()
代わりに次のものがあります。
GeneratedData generatedData = ObjectBuilder.createMallet();
ここにJavaファイルがあります...
public class Mallet {
public Mallet(float radius, float height, int numPointsAroundMallet) {
GeneratedData generatedData = ObjectBuilder.createMallet(new Point(0f,
0f, 0f), radius, height, numPointsAroundMallet);
// lots of code omitted
}
}
そして、ここに静的ネストされたクラスが定義されているクラスがあります。ご覧のとおり、メソッド createMallet() は GeneratedData 型のオブジェクトを作成し、上記の Mallet クラスはコンストラクターの代わりにそのメソッドを使用しました。
class ObjectBuilder {
static interface DrawCommand {
void draw();
}
static class GeneratedData {
final float[] vertexData;
final List<DrawCommand> drawList;
GeneratedData(float[] vertexData, List<DrawCommand> drawList) {
this.vertexData = vertexData;
this.drawList = drawList;
}
}
static GeneratedData createMallet(
// lots of code omitted
return builder.build();
}
private final float[] vertexData;
private ObjectBuilder(int sizeInVertices) {
vertexData = new float[sizeInVertices * FLOATS_PER_VERTEX];
}
private GeneratedData build() {
return new GeneratedData(vertexData, drawList);
}
}