Como posso usar uma instância da classe interna de outro método de classe interna?
-
05-07-2019 - |
Pergunta
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();
}
}
Solução
Seu problema é que você precisa i1.bar()
chamada dentro de uma função. Por exemplo
class Ex7Inner2 {
Ex7Inner1 i1 = new Ex7Inner1(); // this is now a field of the Ex7Inner2 class
public void callBar() {
i1.bar(); // this will work
}
}
No futuro, você pode achar que as pessoas são capazes de ser mais útil se você incluir o erro que você começa na sua pergunta, o que eu vou fazer agora. Quando você tenta compilar o código do seu jeito, você receber um erro que se parece com
Ex7.java:26: <identifier> expected
i1.bar();
^
1 error
Este é porque a única coisa que você pode fazer fora de um método (como você tinha originalmente) é variáveis ??DECLARAR. Por isso estava esperando um "identificador" por que isso significava "o nome da variável que você está declarando". Então, se você tinha dito
String s;
então s
teria sido o identificador.
Outras dicas
Algumas coisas errado aqui;
- suas necessidades inner2 estar chamando a i1 dentro de uma função
- desde que você não declarar inner1 estática que necessita uma instância da anexando EX7 de existir.
Assim você pode fazer algo como isto:
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 acessar i1 da EX7.
Onde sua instância EX7 contém um inner1 e um inner2 e sua referência de dentro inner2 é inner2 -> parentEx7 -> inner1 criança.
Se você fizer a estática classe interna pode acabar com a referência EX7, como você está definindo que a classe interna não precisa de uma instância da classe externa de existir.
mas há nenhum método na classe Ex7Inner2. criar método com 'i1.bar ();' chamar dentro e ele compila ok
Ex7Inner1
precisa de uma referência para Ex7
, a fim de criar uma instância. De Ex7Inner2
que a referência é Ex7.this
.
Assim dizem
Ex7Inner1 i1 = Ex7.this.new Ex7Inner1()
Veja a Java Tutorial de mais informações .