Annotation em Java

14 06 2008

Saudações

Bom no site da SUN tem uma porção de coisa falando sobre annotation, vou dar minha contribuição.

Objetivo:

Criar uma anotação que será usada para validar os valores máximos e mínimos de um número inteiros

Annotation
É o arquivo .java que contém a definição da anotação, no caso o nome da anotação é limite e ela possuirá dois valores maximo e minimo

package anotacao;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

// Onde a anotação pode ser aplicada FIELD = atributos, TYPE = em qualquer lugar
@Target (ElementType.FIELD)

// qual o escopo da annotation (SOURCE, CLASS e RUNTIME)
@Retention (RetentionPolicy.RUNTIME)

// Declaração da interface
public @interface limite {
    public int maximo();
    public int minimo();
}

Classe que utiliza-se da anotação limite

package anotacao;

public class testarAnotacao {

    @limite(minimo=18, maximo=100)
    public int idade;

    @limite(minimo=0,maximo=100)
    public int peso;

    public testarAnotacao(int idade, int peso) throws NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
        this.idade = idade;
        this.peso = peso;
    }
}

Trecho de código que utiliza a classe testarAnotacao e aplica a validação de acordo com os valores definidos nas annotations.

        // instancia o objeto testeAnotacao
        testarAnotacao t = new testarAnotacao(10,25);

        // por reflexão pegar o valor meximo e minimo
        //Object obj = new testarAnotacao(idade, peso);
        Class c1 = t.getClass();
        Field[] field = c1.getDeclaredFields();

        for(Field f: field){
            limite lim = f.getAnnotation(limite.class);

            // se achou a anotação
            if(lim != null){
                if(f.getName().equals("idade")){
                    if(lim.minimo() > c1.getField("idade").getInt(t)){
                        System.out.println("O valor mínimo do campo Idade é "+lim.minimo());
                    }

                    if(lim.maximo() < c1.getField("idade").getInt(t)){
                        System.out.println("O valor máximo do campo Idade é "+lim.maximo());
                    }
                }
            }
        }

A anotação limite é uma anotação em tempo de execução, porém, existem as anotações de código fonte, por exemplo o @param e o @description que usamos para documentar nosso código fonte é usados pela ferramenta javaDoc para gerar páginas HTML no padrão de documentação Java.


Ações

Information

3 responses

10 07 2008
Túlio

Gostei do post, mas tenho uma dúvida. Como posso aplicar essa validação em runtime. Utilizando seu exemplo, setei um valor maior que o máximo, como faço para executar a regra em tempo de execução?

10 07 2008
battisti

Bom Túlio este código ai é para ser executada em tempo de execução, você queria algo em tempo de compilação ?

3 04 2009
saisso

Vlw pelo post, era bem isso que eu estava procurando.

Flw

Deixe um comentário