362 Stimmen

Was verursacht den Fehler "No enclosing instance of type Foo is accessible" und wie kann ich ihn beheben?

Ich habe den folgenden Code:

class Hello {
    class Thing {
        public int size;

        Thing() {
            size = 0;
        }
    }

    public static void main(String[] args) {
        Thing thing1 = new Thing();
        System.out.println("Hello, World!");
    }
}

Ich weiß Thing bewirkt nichts, aber mein Hello, World-Programm lässt sich auch ohne diese Option kompilieren. Es ist nur meine definierten Klassen, die auf mich scheitern.

Und es weigert sich, zu kompilieren. Ich bekomme No enclosing instance of type Hello is accessible." in der Zeile, die ein neues Thing erstellt. Ich vermute, entweder:

  1. Ich habe Probleme auf Systemebene (entweder in DrJava oder meiner Java-Installation) oder
  2. Ich habe einige grundlegende Missverständnisse darüber, wie man ein funktionierendes Programm in Java konstruiert.

Irgendwelche Ideen?

0voto

aepurniet Punkte 1709

Sie müssen nicht wirklich etwas als statisch deklarieren, aber Sie müssen eine umschließende Instanz angeben, entweder implizit, indem Sie in der gleichen Klasse sind, explizit vor dem new oder explizit im Konstruktor.

class A {

    class B { 
        final A a = A.this;
    }

    class C extends B { }

    final B b = new B();
    final C c = new C();

}

class D extends A.B {

    public D(A a) {
        a.super();
    }

}

class E { 

    final A   a =     new A();
    final A.B b =   a.new B();
    final A.C c = b.a.new C();
    final D   d =     new D(a);

}

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