Para acceder al campo x de una clase exterior A partir de una clase interna B, que se dan cuenta de que se puede utilizar "A.this.x". Pero, ¿y si la clase externa también es anónima? Por ejemplo,Acceso campo de una clase anónima exterior de una clase anónima interna
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));
}
}
Cuando se ejecuta este código, el valor de 4 se imprime, ya que es el valor del campo de c2 x. Sin embargo, me gustaría cambiar la línea marcada "THIS LINE" para que devuelva la x de la clase externa (es decir, el campo x de c1, con el valor 3). Si la clase externa (es decir, la clase de c1) eran una clase Un llamado, entonces podría reemplazar
return x;
con
return A.this.x;
Pero desde la clase externa también es anónima, no tengo un nombre para usar
Pregunta: ¿Hay alguna manera de modificar la línea etiquetada "THIS LINE" para que se refiera al campo x de c1 en lugar de c2, sin cambiar las clases anónimas en clases con nombre?
Me doy cuenta de que este código es realmente feo y no es un buen estilo de programación utilizar clases anónimas de esta manera, pero el código está siendo generado por otro programa, y esta es la forma más fácil de implementar el generador.
Los campos no necesitan ser definitivos; eso es solo para parámetros/variables locales. Si llamaba al campo exterior 'y', podía acceder a él desde la clase más interna. –