Comments on: “Em que classe estou”, diz o Object para o outro http://zonaj.org/2008/08/25/em-que-classe-estou-diz-o-object-para-o-outro/ Zona Java - Um blog português sobre java. Wed, 27 Mar 2013 10:22:40 +0000 hourly 1 https://wordpress.org/?v=4.1.41 By: PJG http://zonaj.org/2008/08/25/em-que-classe-estou-diz-o-object-para-o-outro/#comment-109 Mon, 25 Aug 2008 21:22:00 +0000 http://www.zonaj.org/?p=122#comment-109 Onde escrevi:
“o código que invocou o método”

…queria escrever:
“o bytecode que invocou o método”

Sorry!

]]>
By: PJG http://zonaj.org/2008/08/25/em-que-classe-estou-diz-o-object-para-o-outro/#comment-108 Mon, 25 Aug 2008 21:20:01 +0000 http://www.zonaj.org/?p=122#comment-108 Não tinha percebido bem.

Mas a verdade é que apenas te será possível encontrar qual a classe em que o método foi DECLARADO.

A menos que estejas num ambiente muito permissivo, com o código compilado com informação de debug (para ter etiquetas de número de linha no bytecode) , e utilizes a informação na stack trace para analisar o código que invocou o método, já que as duas chamadas que apresentas são representadas por bytecode diferente. Algo do tipo:

INVOKESTATIC org/zonaj/whatever/package/A$getMyName()V

INVOKESTATIC org/zonaj/whatever/package/B$getMyName()V

=:o)

Have Fun!

]]>
By: Ruben Badaró http://zonaj.org/2008/08/25/em-que-classe-estou-diz-o-object-para-o-outro/#comment-107 Mon, 25 Aug 2008 20:56:45 +0000 http://www.zonaj.org/?p=122#comment-107 Tinha-me enganado no segundo output, ambas as respostas davam A.

Penso que a tua solução também me dá a superclasse e nunca a subclasse. E o que eu queria era saber qual a classe que foi utilizada para invocar o método (no meu exemplo, que me desse B e não A)

]]>
By: PJG http://zonaj.org/2008/08/25/em-que-classe-estou-diz-o-object-para-o-outro/#comment-106 Mon, 25 Aug 2008 20:23:20 +0000 http://www.zonaj.org/?p=122#comment-106 public class GetMyClassTrial {

public static void main(String[] args) {
System.out.println(“I know my class : ” + GetMyClassTrial.class.getName());
System.out.println(“I don’t know my class : ” + Thread.currentThread().getStackTrace()[2].getClassName());
}

}

]]>