Saber de onde um método foi chamado

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?

puts boa pergunta!!!

Pra que?

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.

salve! salve o conhecimento!!

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

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?

poutz

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

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

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

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

Alberto

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.

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