Ich habe den folgenden Code. Ich möchte das äußere Klassenobjekt erreichen, mit dem ich das innere Klassenobjekt erstellt habe inner
. Wie kann ich es tun?
public class OuterClass {
public class InnerClass {
private String name = "Peakit";
}
public static void main(String[] args) {
OuterClass outer = new OuterClass();
InnerClass inner = outer.new InnerClass();
// How to get the same outer object which created the inner object back?
OuterClass anotherOuter = ?? ;
if(anotherOuter == outer) {
System.out.println("Was able to reach out to the outer object via inner !!");
} else {
System.out.println("No luck :-( ");
}
}
}
EDIT: Nun, einige von euch haben vorgeschlagen, die innere Klasse durch Hinzufügen einer Methode zu modifizieren:
public OuterClass outer() {
return OuterClass.this;
}
Aber was ist, wenn ich keine Kontrolle zum Ändern der inneren Klasse habe? Haben wir dann (nur zur Bestätigung) eine andere Möglichkeit, das entsprechende äußere Klassenobjekt vom inneren Klassenobjekt zu erhalten?
quelle
OuterClass.this
verweist auf die äußere Klasse.quelle
Sie könnten (sollten aber nicht) Reflexion für den Job verwenden:
Natürlich ist der Name der impliziten Referenz absolut unzuverlässig, also sollten Sie, wie gesagt, nicht :-)
quelle
Die allgemeinere Antwort auf diese Frage betrifft schattierte Variablen und wie auf sie zugegriffen wird.
Im folgenden Beispiel (von Oracle) beschattet die Variable x in main () Test.x :
Wenn Sie dieses Programm ausführen, wird Folgendes gedruckt:
Weitere Informationen finden Sie unter : http://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.6
quelle
Hier ist das Beispiel:
quelle
Wenn Sie keine Kontrolle über das Ändern der inneren Klasse haben, kann die Refektion Ihnen helfen (aber nicht empfehlen). Diese $ 0 ist eine Referenz in der inneren Klasse, die angibt, welche Instanz der äußeren Klasse zum Erstellen der aktuellen Instanz der inneren Klasse verwendet wurde.
quelle
Natürlich ist der Name der impliziten Referenz unzuverlässig, daher sollten Sie keine Reflexion für den Job verwenden.
quelle
Wurden in 2020-06-15 bearbeitet
quelle