Recebendo o nome do método

Boa tarde a todos.
Existe alguma forma de pegar o nome do método que está sendo executado, como acontece quando utilizo:

   this.getClass().getName();

Grato a todos.
Ederson

Dah sim, mas eh meio gambiarrento:

try { throw new Exception(); } catch (Exception e) { System.out.println(e.getStackTrace()[0].getMethodName()); }

Hehehe, realmente fica “bunito pacas”.

Muito obrigado CV

[quote=“cv”]Dah sim, mas eh meio gambiarrento:

try { throw new Exception(); } catch (Exception e) { System.out.println(e.getStackTrace()[0].getMethodName()); }[/quote]

Eca!!
Faz direito por favor:

Throwable t = new Throwable();
t = t.fillInStackTrace();
t.getStackTrace()[0];

Olá a todos.
Realizei o testes com os dois códigos apresentados, mas eles tiveram divergências quanto ao local onde ocorreu o erro.

No código do CV, trouxe a linha correta.

RetornaString.retornaMensagem(RetornaString.java:34)

No código do Louds, trouxe a linha onde recebe o objeto Throwable a partir do método fillInStackTrace(). Utilizei a conversão para String nele para que pudesse visualizar o conteúdo corretamente, talvez isso possa ter causado a divergência. Estou certo Louds?

RetornaString.retornaMensagem(RetornaString.java:58)

A classe criada é apenas para teste. Ficam os resultados para verificarmos qual possui a melhor saída.

Grato a todos.
Ederson

Ele preenche com o stacktrace do local onde fillInStackTrace() for chamado.

Falando nisso, a chamada a fillInStackTrace() é redundante, basta construir um Throwable.

Vou fazer um novo teste.

Obrigado Louds.

Hmm… boa, Louds!

public String emQueLinhaEuEstou() { return new Throwable().getStackTrace()[0].toString(); }

public void main(String[] args) { System.out.println(emQueLinhaEuEstou()); int i = 1+1; System.out.println(emQueLinhaEuEstou()); }

Se der errado, talvez o indice 0 no array de StackTraceElements nao seja 0, mas 1. YMMV :smiley:

:shock: :shock: :shock: