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?
Quem chamou o método?
8 Respostas
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
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.
Outra maneira bem POG é lançar uma Exception e pegar da StackTrace a informação.
String whoCalls = new Exception().getStackTrace()[1].getClassname();
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);
}
Olha… nao sabia que Thread tinha a StackTrace também.
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
Sinceramente… nunca precisei disso em uma situação real então não cheguei a ver como é feito.