Classe anônima

21 respostas
M

Pessoal quando estou dentro de uma classe anônima ou numa classe interna como faço para acessar os elementos da classe externa?

21 Respostas

tRuNkSnEt

:?: ue cara nao entendi bem isso mas pelo que saquei vc quer pegar um classe ou pacote para poder usar seus metodos entaum vai…

:idea:

exemplo

<img src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14/assets/72x72/s.pngmiley.png?v=9" title=":smiley:" class="emoji" alt=":smiley:">  8)

import javax.swing.JOptionPane;

(java x = pacote, swing = classe, JOptionPane = metodo (cria janelas de entrada de dados, janelas de impressao etc)

import javax.swing.*;

(* importa todos os metodos da classe swing)

importa java.awt.*;

ufa i por ai vai … saum muitas hihihih :oops:

M

Não cara, assim…
Olha o fonte…

consultar = new JButton("Consultar"); consultar.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent evt) { ..............codigo........... } } );

eu criei uma classe anônima para tratar eventos mas não sei como acessar métodos na classe externa…entendeu?

caiofilipini

Bom, se eu não me engano, uma classe interna tem acesso total aos elementos da classe externa, desde que a classe interna não seja static.

[]'s

M

Pois é cara eu tb pensava mas assim…a classe externa se estende a JPanel portanto por herança tenho acesso aos métodos de JPanel…por´me quando quero acessar estes métodos dentro da classe anônima eu não consigo…nem por this.metodo, nem NomeDaClasse.metodo…

Tem alguma outra idéia?

caiofilipini

Bom, por this.metodo() não funcionaria mesmo, já que this referencia o seu objeto da classe anônima…

M

E isso significa q estou lascado? :evil:

caiofilipini

Não!!!

Posta seu código pra podermos analisar melhor o caso.

urubatan

tente NomeDaClasse.this.metodo()

caiofilipini

Não sei se tem a ver, mas, sem colocar o this - NomeDaClasse.this.metodo() - seria uma chamada a um método static, e por isso não funciona (se realmente o método static não existir)?

M

Funcionou!

Tipo pq NomeDaClasse.metodo não funcionou?

Vc pode explicar como que funciona NomeDaClasse.this.metodo?

L

A sua classe anônima não herda a classe em que ela está contida.

Fazer m this dentro dela, significa referencia a classe anônima em si.

Quando vc coloca NomeDaClasse.this.blablabla… vc diz que precisa referenciar a classe que contém a classe anônima…

Understand? (e se não for isso, por favor, me corrijam hehehe.)

:oops:

[]'s

M

Cara ainda não saquei…

pq NomeDaClasse.metodo não funciona? Pq tem q ter este this…tipo eu sei q this não vai funcionar na anônima até aí tranquilo só não entendo pq NomeDaClasse.metodo não funciona…

L

Só vai funcionar assim se o método for STATIC

lembra??? Não necessita de instância da classe para ser executado.

Agora, para vc usar um método não static, vc precisa dizer sobre qual instância o método vai agir.

por isso vc usa o this

sacou agora??

:wink:

[]'s

caiofilipini

Então a minha suspeita tava certa… :smiley:

[]'s

M

Putz veio!! Agora acho q saquei…

Vc dizendo agora q me toquei NomeDaClasse.metodo é para a chamada de métodos estáticos da classe…

Na classe anônima eu não acesso só com THIS pq taria referênciando a própria classe anônima…

Agora NomeDaClasse.this(referência da instancia).metodo eu acesso todos os componentes da classe externa da instância atual…

Acho q entendi…
Vc assina embaixo disso q escrevi agora?

caiofilipini

Eh isso ae! :smiley:

[]'s

L

:wink:

Certíssimo!

[]'s

M

Valeu Caio e Leandro pelos esclarecimentos!!!

:smiley:

A

acho que eu tenho o mesmo problema do cara de cima, mas com algumas variantes. no meu caso, eu quero mandar uma mensagem de um frame (frame1, por exemplo) para o frame que criou o frame1. só que quando eu especifico NomeDaClasse.this.método() ele dá essa mensagem:
not an enclosing class: package.NomeDaClasse
e colocar NomeDaClasse.método também não dá porque quero acessar métodos não-estáticos. alguém pode me dar uma idéia?
valeu

A

epa, já resolvi aqui em casa. pior que era um erro pitoresco…

fabim

methal:
Cara ainda não saquei…

pq NomeDaClasse.metodo não funciona? Pq tem q ter este this…tipo eu sei q this não vai funcionar na anônima até aí tranquilo só não entendo pq NomeDaClasse.metodo não funciona…

Não funciona pq o método nao é um método estático.

quanto à sua dúvida:

Se dentro da classe interna, vc usar this.metodoLouco(), Java entende que vc esta buscando um método chamado metodoLouco() definido dentro da classe anônima. Não é isso que vc quer. Vc quer acessar o metodoLouco que esta definido na classe externa, com a qual essa classe interna ( classes anônimas sao um tipo de classe interna ) partilha um RELACIONAMENTO ESPECIAL DE CLASSE INTERNA, entao vc deve usar

NomeDaClasseExterna.this

isso te devolve a referência da classe externa, com a qual a classe interna esta desfrutando de um relacionamento especial.

como o método não é estatico, vc so pode acessa-lo atraves de uma referência.

Criado 22 de agosto de 2003
Ultima resposta 21 de nov. de 2007
Respostas 21
Participantes 7