Wie ILikeTaus Kommentar sagt, können Sie nicht auf eine Klasse zugreifen, die Sie in einer Methode definieren. Sie können es außerhalb der Methode definieren, aber eine andere Möglichkeit besteht darin, eine interface
(oder abstrakte Klasse) zu definieren. Dann wäre der Code immer noch innerhalb Ihrer Methode und könnte auf final
Variablen und Parameter zugreifen, die in der Methode definiert sind (was Sie nicht tun konnten, wenn Sie die gesamte Klasse nach draußen verschoben haben). Etwas wie:
class Outer {
int a = 100;
public interface AnInterface {
void mInner(); // automatically "public"
}
AnInterface mOuter() { // note that the return type is no longer Object
class Inner implements AnInterface {
@Override
public void mInner() { // must be public
int y = 200;
System.out.println("mInner..");
System.out.println("y : " + y);
}
}
Inner iob = new Inner();
return iob;
}
}
class Demo {
public static void main(String[] args) { // the preferred syntax
Outer t = new Outer();
Outer.AnInterface ob = t.mOuter();
ob.mInner();
}
}
Hinweis: nicht
Beachten Sie, dass der Rückgabetyp und die Art der ob
, geändert wurden von Object
getestet. Wenn Sie in Java ein Objekt als Object
deklarieren, können Sie nur auf die für Object
definierten Methoden zugreifen. Der Compiler muss zur Kompilierungszeit (nicht zur Laufzeit) wissen, dass Ihr Objekt ob
über eine mInner
-Methode verfügt, und es kann nicht sagen, ob das einzige, was es weiß, dass es ein Object
ist. Durch die Änderung in AnInterface
weiß der Compiler jetzt, dass es eine mInner()
-Methode hat.
was ist der Fehler, den Sie get –
Sie können nicht auf eine Klasse zugreifen, die Sie in einer Methode definieren. Definieren Sie es außerhalb der Methode und Sie können darauf zugreifen. –
Ausnahme im Thread "main" java.lang.Error: Ungelöstes Kompilierungsproblem: Die Methode mInner() ist für den Typ Objekt nicht definiert. –