Um auf das Feld x einer äußeren Klasse A von einer inneren Klasse B zuzugreifen, stelle ich fest, dass Sie "A.this.x" verwenden können. Aber was, wenn die äußere Klasse auch anonym ist? Zum BeispielZugriff auf ein Feld einer äußeren anonymen Klasse aus einer inneren anonymen Klasse
public class Main1 {
public static void main(String[] args) {
Comparable c1 = new Comparable(){
int x = 3;
public int compareTo(Object o) {
Comparable c2 = new Comparable(){
int x = 4;
public int compareTo(Object o) {
return x; // <-- THIS LINE
}
};
return c2.compareTo(o);
}
};
System.out.println(c1.compareTo(null));
}
}
Wenn dieser Code ausgeführt wird, wird der Wert von 4 gedruckt, da der Wert von c2 Feld x ist. Ich möchte jedoch die Zeile "THIS LINE" so ändern, dass sie das x der äußeren Klasse zurückgibt (also das Feld x von c1 mit dem Wert 3). Wenn die äußeren Klasse (das heißt, c1 Klasse) eine benannte Klasse A war, dann konnte ich
return x;
mit
return A.this.x;
ersetzen Aber da die äußeren Klasse auch anonym ist, habe mich nicht ein Name zu verwenden.
Frage: Gibt es eine Möglichkeit, die Zeile "THIS LINE" so zu ändern, dass sie sich auf c1s Feld x und nicht auf c2 bezieht, ohne die anonymen Klassen in benannte Klassen zu ändern?
Ich realisiere, dass dieser Code ist wirklich hässlich und es ist nicht gut Programmierstil auf diese Weise anonyme Klassen zu verwenden, aber der Code wird von einem anderen Programm generiert, und dies ist der einfachste Weg, den Generator zu implementieren.
Die Felder müssen nicht endgültig sein; das ist nur für Parameter/lokale Variablen. Wenn er das äußere Feld 'y' nannte, konnte er von der innersten Klasse darauf zugreifen. –