¿Cómo puedo usar una instancia de clase interna de otro método de clase interna?
-
05-07-2019 - |
Pregunta
public class Ex7 {
private int fld;
private void meth(int val) {
fld = val;
System.out.println(" meth() -> fld = " + fld);
}
public class Ex7Inner1 {
void operateOnFld() {
fld = 12;
}
void operateOnMeth() {
meth(10);
}
public void bar() {
System.out.println(" bar() ");
}
}
class Ex7Inner2 {
Ex7Inner1 i1 = new Ex7Inner1();
// how to call i1.bar() ??
i1.bar();
}
}
Solución
Su problema es que necesita llamar i1.bar ()
dentro de una función. Por ejemplo
class Ex7Inner2 {
Ex7Inner1 i1 = new Ex7Inner1(); // this is now a field of the Ex7Inner2 class
public void callBar() {
i1.bar(); // this will work
}
}
En el futuro, es posible que las personas puedan ser más útiles si incluyes el error que obtienes en tu pregunta, lo que haré ahora. Cuando intenta compilar el código a su manera, aparece un error que se parece a
Ex7.java:26: <identifier> expected
i1.bar();
^
1 error
Esto se debe a que lo único que puede hacer fuera de un método (como lo tenía originalmente) es declarar variables. Así que esperaba un " identificador " por lo que significó " el nombre de la variable que está declarando " ;. Así que si hubieras dicho
String s;
entonces s
habría sido el identificador.
Otros consejos
Algunas cosas están mal aquí;
- tu inner2 necesita estar llamando al i1 dentro de una función
- ya que no declaraste inner1 estática necesita una instancia de la adjuntando Ex7 a existir.
Para que puedas hacer algo como esto:
public class Ex7 {
private Ex7Inner1 i1;
public class Ex7Inner1 {
public void bar() {
System.out.println( " bar() " );
}
}
class Ex7Inner2 {
// how to call i1.bar() ??
public Ex7Inner2() {
Ex7.this.i1.bar();
}
}
}
Para acceder al i1 del Ex7.
Donde tu instancia de Ex7 contiene un inner1 y un inner2 y tu referencia desde interior2 es inner2 - > parentEx7 - > child inner1.
Si crea la clase interna estática, puede eliminar la referencia Ex7, ya que está definiendo que la clase interna no necesita una instancia de la clase externa para existir.
pero no hay ningún método en la clase Ex7Inner2. crear método con 'i1.bar ();' Llama al interior y compila ok
Ex7Inner1
necesita una referencia a Ex7
para crear una instancia. Desde Ex7Inner2
esa referencia es Ex7.this
.
Así decir
Ex7Inner1 i1 = Ex7.this.new Ex7Inner1()
Consulte el Tutorial de Java para obtener más información. .