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.
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?
Bom Túlio este código ai é para ser executada em tempo de execução, você queria algo em tempo de compilação ?
Vlw pelo post, era bem isso que eu estava procurando.
Flw