1. A anotação mais comum
•@Override: usado em métodos para informar aos outros que este método substitui a classe pai
•@Deprecated: Recomenda-se que outros não utilizem a API antiga. Ela gerará uma mensagem de aviso durante a compilação e poderá ser definida em todos os elementos do programa.
•@SuppressWarnings: desativa temporariamente algumas mensagens de aviso
•@Entity: Indica que esta classe é uma classe persistente
2. Crie uma anotação própria
Leia o código antes de falar
1. Implementação de anotação com apenas um parâmetro
Copie o código do código da seguinte forma:
pacote chb.test.annotation;
importar java.lang.annotation.Documented;
importar java.lang.annotation.ElementType;
importar java.lang.annotation.Retention;
importar java.lang.annotation.RetentionPolicy;
importar java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documentado
public @interface MinhaAnnotation1 {
String valor();
}
2. Implementação de anotação com dois parâmetros
Copie o código do código da seguinte forma:
pacote chb.test.annotation;
importar java.lang.annotation.Documented;
importar java.lang.annotation.ElementType;
importar java.lang.annotation.Retention;
importar java.lang.annotation.RetentionPolicy;
importar java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documentado
public @interface MinhaAnnotation2 {
Descrição da string();
boolean isAnnotation();
}
3. Anotação de aula experimental
Copie o código do código da seguinte forma:
pacote chb.test.annotation;
@MyAnnotation1("esta é a anotação1")
classe pública AnotaçãoDemo {
@MyAnnotation2(descrição="isto é anotação2",isAnnotation=true)
public void dizerOlá(){
System.out.println("olá mundo!");
}
}
4. Classe de descrição do teste de anotação
Copie o código do código da seguinte forma:
pacote chb.test.annotation;
importar java.lang.reflect.Method;
importar org.junit.Test;
classe pública TestAnnotation {
@Teste
public void test() lança ClassNotFoundException, SecurityException, NoSuchMethodException{
Classe<?> cls = Class.forName("chb.test.annotation.AnnotationDemo");
sinalizador booleano = cls.isAnnotationPresent(MyAnnotation1.class);
se(sinalizador){
System.out.println("Julgar a classe a ser anotada");
MyAnnotation1 anotação1 = cls.getAnnotation(MyAnnotation1.class);
System.out.println(annotation1.value());
}
Método método = cls.getMethod("sayHello");
sinalizador = método.isAnnotationPresent(MyAnnotation2.class);
se(sinalizador){
System.out.println("O método de julgamento também é anotação");
MyAnnotation2 anotação2 = método.getAnnotation(MyAnnotation2.class);
System.out.println(annotation2.description()+"/t"+annotation2.isAnnotation());
}
}
}
Como resultado do experimento, o console gerou as seguintes informações:
Determinar se a classe é anotação
isso é anotação1
O método de julgamento também é anotação
esta é a anotação2 verdadeira
3. Introdução e explicação
1. @Target(ElementType.TYPE) em MyAnnotation1
O ElementType em @Target é usado para especificar em quais elementos o tipo Annotation pode ser usado.
TYPE (tipo), FIELD (atributo), METHOD (método), PARAMETER (parâmetro), CONSTRUCTOR (construtor), LOCAL_VARIABLE (variável local), PACKAGE (pacote), onde TYPE (tipo) refere-se ao tipo que pode ser usado em Tipos de classe, interface, Enum e anotação.
2. @Retention(RetentionPolicy.RUNTIME) em MyAnnotation1
RetentionPolicy possui três estratégias, a saber:
•FONTE: Esta informação do tipo Anotação só será retida no código fonte do programa. Se o código fonte for compilado, os dados da Anotação desaparecerão e não serão retidos no arquivo .class compilado.
•CLASS: Esta informação do tipo Annotation é retida no código fonte do programa e também no arquivo .class compilado. Durante a execução, esta informação não será carregada na JVM. Nota: A estratégia padrão é do tipo CLASS
•RUNTIME: Indica que as informações são retidas no código fonte e nos arquivos .class compilados, e essas informações serão carregadas na JVM durante a execução.
3. @Documentado em MyAnnotation1
O objetivo é exibir essas informações de anotação no documento da API JAVA. Se @Documented não for adicionado, as informações de anotação relevantes não serão exibidas no documento da API JAVA.
4. @interface em MyAnnotation1
Palavra-chave, indicando que a classe está definida para anotação
5. String valor() em MyAnnotation1;
Indica que há um parâmetro de membro com o valor do nome e o direito de acesso como modificador padrão. Observe os dois pontos a seguir:
•Os direitos de acesso só podem ser modificados com público e padrão (padrão)
•Os membros dos parâmetros só podem usar os oito tipos de dados básicos de byte, short, char, int, long, float, double, boolean e tipos de dados como String, Enum, Class, anotações e matrizes desses tipos
6.@MyAnnotation1("isto é anotação1") em AnnotationDemo
Como MyAnnotation1 possui apenas um parâmetro, você pode escrever o valor diretamente entre parênteses. Obs.: Caso a Anotação possua apenas um parâmetro, recomenda-se que o nome do parâmetro seja definido como valor
7.cls.isAnnotationPresent(MyAnnotation1.class) em TestAnnotation
Determine se a classe usa a anotação MyAnnotation1
8. MyAnnotation1 em TestAnnotation annotation1 = cls.getAnnotation(MyAnnotation1.class)
Retorna a anotação desta classe para MyAnnotation1
9.método.isAnnotationPresent(MyAnnotation2.class) em TestAnnotation
Determine se o método usa a anotação de MyAnnotation2