Criando anotações em Java

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!

Deixe um Comentário

6 Comentários.

  1. Opa!

    Cara, perfeito esse post!

    Muito simples e claro e me ajudou gigantemente!

    You are a Java Monster!

  2. Cara esse post sempre me salva!

    HUAuhAuhauahua

    Mto bom!

  3. 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.

  4. Parabéns pelo excelente trabalho 😀

  5. Parabéns!

  6. Ótimo post, parabéns pelo excelente trabalho.

Deixe um Comentário


NOTA - Você pode usar estesHTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>