Ist keine einschließende Klasse Java
Ich versuche, mich ein tetris-Spiel und ich bin immer "Form ist nicht einer umschließenden Klasse", wenn ich versuche, ein Objekt zu erstellen
public class Test {
public static void main(String[] args) {
Shape s = new Shape.ZShape();
}
}
Ich bin mit inneren Klassen für jede Form. Hier ist ein Teil von meinem code
public class Shape {
private String shape;
private int[][] coords;
private int[][] noShapeCoords = { { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 } };
private int[][] zShapeCoords = { { 0, -1 }, { 0, 0 }, { -1, 0 }, { -1, 1 } };
private int[][] sShapeCoords = { { 0, -1 }, { 0, 0 }, { 1, 0 }, { 1, 1 } };
private int[][] lineShapeCoords = { { 0, -1 }, { 0, 0 }, { 0, 1 }, { 0, 2 } };
private int[][] tShapeCoords = { { -1, 0 }, { 0, 0 }, { 1, 0 }, { 0, 1 } };
private int[][] squareShapeCoords = { { 0, 0 }, { 1, 0 }, { 0, 1 }, { 1, 1 } };
private int[][] lShapeCoords = { { -1, -1 }, { 0, -1 }, { 0, 0 }, { 0, 1 } };
private int[][] mirroredLShapeCoords = { { 1, -1 }, { 0, -1 }, { 0, 0 }, { 0, 1 } };
public Shape(){
int[][] coords = noShapeCoords;
shape = "NoShape";
}
class ZShape {
int[][] coords = zShapeCoords;
String shape = "ZShape";
}
class SShape {
int[][] coords = sShapeCoords;
String shape = "SShape";
}
//etc
}
Was mache ich falsch ?
InformationsquelleAutor der Frage V Sebi | 2013-11-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
ZShape
ist nicht statisch, so Bedarf es einer Instanz der äußeren Klasse.Ist die einfachste Lösung, um ZShape und jede verschachtelte Klasse
static
wenn Sie können.Ich würde auch alle Felder
final
oderstatic final
dass Sie als gut.InformationsquelleAutor der Antwort Peter Lawrey
Angenommen RetailerProfileModel ist deine Main-Klasse und RetailerPaymentModel ist eine innere Klasse, die innerhalb es. Sie können erstellen Sie ein Objekt der Inneren Klasse außerhalb der Klasse wie folgt:
InformationsquelleAutor der Antwort Vishal Kumar
Was würde ich vorschlagen, ist nicht die Umwandlung der nicht-statischen Klasse eine statische Klasse, weil in diesem Fall, Ihre inneren Klasse kann nicht auf die nicht-statische member der äußeren Klasse.
Beispiel :
So, in diesem Fall, Sie können etwas tun:
InformationsquelleAutor der Antwort Amit Upadhyay
Wie gesagt in der docs:
InformationsquelleAutor der Antwort Brennan Miller
Manchmal brauchen wir zum erstellen einer neuen Instanz einer inneren Klasse kann nicht statisch sein, denn es hängt davon ab, auf Globale Variablen der übergeordneten Klasse. In dieser situation, wenn Sie versuchen, erstellen Sie die Instanz einer inneren Klasse, die nicht statisch ist, eine
not an enclosing class
Fehler geworfen wird.Nehmen wir das Beispiel von der Frage, was passiert, wenn
ZShape
können nicht statisch sein, denn es müssen Globale variableShape
Klasse?Wie können Sie neue Instanz von
ZShape
? Das ist wie:Fügen Sie eine get-Methode in der übergeordneten Klasse:
Wie diese:
InformationsquelleAutor der Antwort M9J_cfALt
Ich hatte das gleiche problem.
Ich gelöst, indem eine Instanz für jede innere öffentliche Klasse.
wie für Sie die situation, schlage ich vor, Sie verwenden Sie Vererbung, andere als innere Klassen.
dann können Sie new Shape();
und besuchen Sie ZShape durch Form.zShape;
InformationsquelleAutor der Antwort
Nicht brauchen, um die geschachtelte Klasse als statisch, sondern es muss öffentlich sein
InformationsquelleAutor der Antwort Younes
Im Fall, wenn das Übergeordnete Klasse singleton verwenden Sie folgenden Weg:
wo getInstance() return parent class singleton-Objekt.
InformationsquelleAutor der Antwort CoDe
Eine Sache, die ich nicht erkennen auf den ersten, wenn das Lesen der akzeptierten Antwort war, dass eine innere Klasse static ist im Grunde dasselbe wie verschieben Sie es an Ihren eigenen separaten Klasse.
So, wenn der Fehler
Kann man es lösen, in eine der folgenden Möglichkeiten:
static
Schlüsselwort, um das innere Klasse, oderInformationsquelleAutor der Antwort Suragch