[RESOLVIDO] Obter anotação de uma Classe sem instancia-la

5 respostas
rodrigoalmeida

Olá pessoal,

Tenho uma anotação chamada Implementation com o atritbuto absoluteClassName(), mas toda vez que testo, o valor da anotação vem nulo.
Consigo pegar anotações de um objeto instaciado, mas de um Class não consegui. Já procurei na net, mas não achei nenhuma explicação.

[color=red]Alguem sabe me dizer o por quê disso?[/color]

// Instancia a implementação da class passada no parâmetro
private Class getImplementation(Class paramClasse) throws Exception {
        Implementation m = (Implementation) paramClasse.getAnnotation(Implementation.class);
        Class c = Class.forName(m.absoluteClassName());
        return c;
    }

Anotation

@Target (ElementType.TYPE)
@Retention (RetentionPolicy.RUNTIME)
public @interface Implementation {
    public String absoluteClassName();

}

5 Respostas

Marky.Vasconcelos

Qual erro esta dando?

Devia funcionar.

rodrigoalmeida

Dá NullPointerExpetion porque não retorna a anotação, assim não tem o método absoluteClassName();

Marky.Vasconcelos

Cade onde voce invoca esse método?

E como voce fazia quando voce disse que funcionava?

E

O método forName da classe java.lang.Class permite que você pegue as anotações de uma classe, sem instanciá-la nem inicializar suas variáveis estáticas.
Basta usar a opção correta (passe “false” no parâmetro “initialize”).

http://download-llnw.oracle.com/javase/6/docs/api/java/lang/Class.html#forName(java.lang.String,%20boolean,%20java.lang.ClassLoader)

rodrigoalmeida

Testei dos dois modos e funcionou beleza.

O erro era que não tinha colocado a anotação na classe certa.
Não sei se tava e depois tirei para algum teste, porém hoje de manhã quando cheguei vi que não tinha.
Talvez o nomes das classes estavam me atrapalhando também, mudei isso para não me confundir de novo.

Desculpe por ter tomado o tempo de vez com meu erro tosco, mas fazia dois dias que estava brigando com isso, eu estava em dúvida se eu estava implementando da forma correta.

Muito Obrigado pela Atenção!

Criado 23 de setembro de 2010
Ultima resposta 24 de set. de 2010
Respostas 5
Participantes 3