412 Stimmen

Ist keine umschließende Klasse Java

Ich versuche, ein Tetris-Spiel zu machen, und bekomme den Compiler-Fehler, wenn ich versuche, ein Objekt zu erstellen

Shape ist keine umschließende Klasse

public class Test {
    public static void main(String[] args) {
        Shape s = new Shapes.ZShape();
    }
}

Ich benutze innere Klassen für jede Form. Hier ist ein Teil meines Codes

public class Shapes {
    class AShape {
    }
    class ZShape {
    }
}

Was mache ich falsch?

9voto

Form shape = new Form();
Form.ZForm zform = shape.new ZForm();

3voto

CoDe Punkte 10682

Wenn die Elternklasse ein Singleton ist, verwenden Sie folgendermaßen:

Parent.Child childObject = (Parent.getInstance()).new Child();

wo getInstance() das Singleton-Objekt der Elternklasse zurückgeben wird.

1voto

Ich bin auf das gleiche Problem gestoßen. Ich habe es gelöst, indem ich für jede innere öffentliche Klasse eine Instanz erstellt habe. Für deine Situation schlage ich vor, Vererbung anstelle von inneren Klassen zu verwenden.

public class Shape {

    private String shape;

    public ZShape zShpae;
    public SShape sShape;

    public Shape(){
      int[][] coords =  noShapeCoords;
      shape = "NoShape";
      zShape = new ZShape();
      sShape = new SShape();
    }

    class ZShape{
      int[][] coords =  zShapeCoords;
      String shape = "ZShape";
    }

    class SShape{
      int[][] coords = sShapeCoords;
      String shape = "SShape";
    }

 //etc
}

dann kannst du `new Shape();` und besuche ZShape durch `shape.zShape`;

1voto

Younes Punkte 51

Es ist nicht erforderlich, die verschachtelte Klasse als statisch zu markieren, sie muss jedoch öffentlich sein

public class Test {
    public static void main(String[] args) {
        Shape shape = new Shape();
        Shape s = shape.new Shape.ZShape();
    }
}

1voto

Suragch Punkte 420096

Eine Sache, die ich zunächst nicht bemerkt habe, als ich die akzeptierte Antwort las, war, dass das Deklarieren einer inneren Klasse als statisch im Grunde dasselbe ist wie das Verschieben in eine eigene separate Klasse.

Daher, wenn du den Fehler erhältst

xxx ist keine umfassende Klasse

Kannst du es auf eine der folgenden Arten lösen:

  • Füge das static Schlüsselwort zur inneren Klasse hinzu, oder
  • Verschiebe sie in eine eigene separate Klasse.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X