tengo el siguiente código. Quiero obtener el objeto de clase externa usando el cual creé el objeto de clase interna inner
. ¿Cómo puedo hacerlo?
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 :-( ");
}
}
}
EDITAR: Bueno, algunos de ustedes sugirieron modificar la clase interna agregando un método:
public OuterClass outer() {
return OuterClass.this;
}
Pero, ¿qué pasa si no tengo control para modificar la clase interna, entonces (solo para confirmar) ¿tenemos alguna otra forma de obtener el objeto de clase externa correspondiente del objeto de clase interna?
fuente
OuterClass.this
hace referencia a la clase externa.fuente
Podrías (pero no deberías) usar la reflexión para el trabajo:
Por supuesto, el nombre de la referencia implícita no es confiable, por lo que, como dije, no deberías :-)
fuente
La respuesta más general a esta pregunta involucra variables sombreadas y cómo se accede a ellas.
En el siguiente ejemplo (de Oracle), la variable x en main () está sombreando Test.x :
La ejecución de este programa imprimirá:
Más en: http://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.6
fuente
Aquí está el ejemplo:
fuente
Si no tiene control para modificar la clase interna, el reflejo puede ayudarlo (pero no recomendarlo). Este $ 0 es una referencia en la clase interna que indica qué instancia de la clase externa se usó para crear la instancia actual de la clase interna.
fuente
Por supuesto, el nombre de la referencia implícita no es confiable, por lo que no debe usar la reflexión para el trabajo.
fuente
Han sido editados en 2020-06-15
fuente