Na época em que pensei em utilizar anotações, foi complicado encontrar um tutorial decente sobre o assunto. Desta forma, vou descrever aqui o básico para criar/buscar valores de uma anotação. Lembro que Anotações foram implementadas no Java 5.
Uma anotação não deixa de ser uma classe. Desta forma, para criar uma anotação:
@Target(ElementType.TYPE ) @Retention(RetentionPolicy.RUNTIME) public @interface MinhaAnotacao { }
A primeira coisa que podemos notar é a utilização de anotações para se criar uma anotação! Sim, é isso mesmo.
A anotação @Target serve para indicar o alvo desta anotação:
ElementType.TYPE -> será uma anotação de classe, interface ou enum;
ElementType.FIELD -> será uma anotação de atributo;
ElementType.METHOD -> será uma anotação de método;
ElementType.CONSTRUCTOR -> será uma anotação de construtor;
ElementType.ANNOTATION_TYPE -> será uma anotação de anotação;
ElementType.LOCAL_VARIABLE -> será uma anotação de variável local;
ElementType.PACKAGE -> será uma anotação de pacote;
ElementType.PARAMETER -> será uma anotação de parâmetro.
A anotação @Retention indica quando que esta anotação será usada:
RetentionPolicy.SOURCE -> será utilizada apenas no código fonte: é descartada pelo compilador e pela VM;
RetentionPolicy.CLASS -> será gravada na classe, mas não será utilizada pela VM;
RetentionPolicy.RUNTIME -> será gravada na classe e utilizada pela VM, assim, pode ser lida por reflexão 🙂
Nossa anotação, por enquanto, não serve para nada. Vamos dar uma utilidade para ela:
@Target(ElementType.TYPE ) @Retention(RetentionPolicy.RUNTIME) public @interface MinhaAnotacao { String nome(); }
Colocando um método na @interface, significa que este terá de ser posto o seu valor no momento de anotar. Abaixo, uma utilização da anotação criada:
@MinhaAnotacao ( nome="valor_nome" ) public class Classe { }
Agora, como faremos para pegar o valor descrito no nome? Através de reflexão. Supondo que o é um objeto do tipo Classe:
Annotation a = o.getClass().getAnnotation(MinhaAnotacao.class); MinhaAnotacao m = (MinhaAnotacao) a; m.nome();
Ou seja: é necessário pegar a anotação, fazer um typeCast e utilizar o método implementado.
As possibilidades de utilização para anotações são infinitas, e podem quebrar um galho enorme!
Espero ter ajudado.
Abraço!
Opa!
Cara, perfeito esse post!
Muito simples e claro e me ajudou gigantemente!
You are a Java Monster!
Cara esse post sempre me salva!
HUAuhAuhauahua
Mto bom!
Cara, eu tava dando uma pesquisada sobre anotações java e encontrei seu blog, o post é bem resumido mas dá uma noção introdutória muito boa.
Resolvi dar uma olhada no restante do blog e considerei muito bom mesmo. Vc está fazendo um bom trabalho.
Parabéns pelo excelente trabalho 😀
Parabéns!
Ótimo post, parabéns pelo excelente trabalho.