Quem chamou o método?

8 respostas
vitorkgb

Tenho uma classe que no construtor existe alguns trecho que não quero que seja executado quando determinada classe o chama, existe alguma forma de fazer isso? ver qual classe está chamando em tempo de execução?

8 Respostas

E

http://www.guj.com.br/posts/list/111487.java#601096

danielfigueiredoc

Você pode criar outro construtor com uma assinatura diferente, e chama-lo qnd você quiser que aconteca determinadas coisas. Sendo assim a classe que não deveria acessar tais “coisas”, chamaria um construtor padrão.
É interessante você entender o conceito de construtores, qnd o compilador o executa ele adiciona o super, this e ordem de execução das coisas, vai facilitar pra você criar sua lógica.
Acho que no google voce vai achar o suficiente pros seus problemas. Espero ter ajudado.

Abraço

G

O ideal é você usar o conceito dos acessos (public, protected, private, default) para limitar quem chama seu método. Essa é a sugestão mais elegante.

E dependendo do seu nível de conhecimento você pode usar aspectos, como já citaram aqui. No aspectj, por exemplo, você consegue saber exatamente quem chamou o método, para onde vai, o que está passando de parametros. EJB também possui isso via @AroundInvoke.

Marky.Vasconcelos

Outra maneira bem POG é lançar uma Exception e pegar da StackTrace a informação.

String whoCalls = new Exception().getStackTrace()[1].getClassname();
G

Mark_Ameba:
Outra maneira bem POG é lançar uma Exception e pegar da StackTrace a informação.

String whoCalls = new Exception().getStackTrace()[1].getClassname();

for (StackTraceElement s : Thread.currentThread().getStackTrace()) { System.out.println(s); }

Marky.Vasconcelos

Olha… nao sabia que Thread tinha a StackTrace também.

G

Mark, tenho um lado bem curioso, então acabo sempre olhando a implementação dos métodos da Sun. Nesses mexes analisei a Throwable e ví que ela chama esse método. Coisas que a gente aprende “fuçando”, hahahaha.

Abraços

Marky.Vasconcelos

Sinceramente… nunca precisei disso em uma situação real então não cheguei a ver como é feito.

Criado 1 de outubro de 2009
Ultima resposta 5 de out. de 2009
Respostas 8
Participantes 5