Saber de onde um método foi chamado

12 respostas
A

digamos que eu tenha um método em uma classe A. Este método chama outro método da classe B.

Tem como saber, na classe B, que método da classe A chamou o método da classe B?

12 Respostas

L

puts boa pergunta!!!

C

Pra que?

Z

Lança uma exceção, captura e silencia ela dentro do método alvo. Com a stacktrace você vai saber quem foi que chamou o método.

try { throw new Exception(); } catch(Exception e) { e.printStackTrace(); }
Se você quiser algo mais bem implementado, é só pecorrer o array da stack pra pegar a classe e o método.

Lembro de já ter visto há muito tempo atrás uma solução dessa aqui no guj.

L

salve! salve o conhecimento!!

A

não existe outra maneira???só com try catch?

A

Eu queria algo mais “clean”, sem usar gambiarras.

o java não fornece algo assim? tipo aquele negocio que permite dizer de onde foi gerado um evento?

R

poutz

tem o esquema de debugging da JVM, deve ter um jeito de fazer isso com o debugging da JVM…

L

Olá

É claro que o Java tem isto. E igualzinho a todas as linguagens que conheço. Basta acrescentar um parâmetro ao método e você sempre passa o nome do método que chama neste parâmetro.

Mas que fazer parse do StackTrace é mais bacana não tenho a menor dúvida.

Assim como o CV, não tenho a menor idéia por qual motivo alguém precisaria disto no sistema.

[]s
Luca

A

pois é, hehe. eu tava fazendo usando uma flag. queria uma forma mais mágica, mas acho que não tem né. :roll:

A

Tenta da uma estudada em orientacao a aspecto. Vc consegueria interceptar toda chamada de metodo e saber exatamente quem chamou

Alberto

B

Não precisa lançar uma exceção para pegar o stack trace. Basta pedir para a thread atual. :wink:

StackTraceElement[] stackTrace = thread.currentThread().getStackTrace();
for (StackTraceElement a: stackTrace)
  System.out.println(a);

Mas não deixa de ser feio e, er… inútil.

A

nossa…bem mais legal declarando um stacktrace…não sabia que rolava pedir para a thread…legal desse jeito…achei mais legal

Criado 22 de julho de 2006
Ultima resposta 23 de jul. de 2006
Respostas 12
Participantes 9