ANNOTATIONS Objetivo é possibilitar a declaração de metadados nos nossos objetos. Configurações de uma classe podem ficar dentro dela, em vez de em um XML. Algumas annotations: Indicarque um método não deve mais ser usado (@Deprecated). Método foi sobrescrito (@Override). Configurar um método como teste do JUnit (@Test). ANNOTATIONS Não são códigos executáveis, que mudam o que é executado ou não. Metadados: informações (dados) que falam sobre nossa classe mas não fazem parte da classe em si. Metadados são muito usados para configurações de funcionalidades anexas àquela classe. Usamos anotações para criar configurações com objetivo de que depois essas anotações sejam lidas e processadas por alguém interessado naquelas informações. EXEMPLO Marcação de uma Annotation: @NomeAnnotation Definição de uma annotation: @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface Coluna { int posicao(); } Uma forma de usar: for (Method metodo : classe.getDeclaredMethods()) { if (metodo.isAnnotationPresent(Coluna.class)) { Coluna anotacao = metodo.getAnnotation(Coluna.class); if (anotacao.posicao() == coluna) return metodo.invoke(objeto, args); } } } EXERCÍCIO Criar uma classe contendo os seguintes atributos com os métodos get e set para cada atributo: Id, nome e escala. Criar uma anotação que receba um intervalo numérico e um valor padrão (três argumentos inteiros). Criar um objeto da classe e verificar se o valor do atributo escala está dentro do intervalo passado na annotation, e caso não esteja atualizar o valor para o padrão. (de 1 até 5 por exemplo deixa como está) Maior ou menor que o intervalo, set o valor padrão 0.