Javaの注記Annotation


Annotationはjava.lang.annotation.Annotationから継承するクラスであり、プログラム解析ツールや仮想マシンにpackage class field methedなどの情報を提供するためのものであり、使用方法以外は他のクラスと何ら変わらない.
注釈の文法は比較的簡単で、@記号の使用を除いてjavaの固有の文法と基本的に一致している.
 
実はjdkにはjava.langパッケージに定義されたいくつかの私たちがよく使う注釈が内蔵されています.これらは次のとおりです. 
 
      @Overrideは、現在のメソッドが親を上書きするメソッドであることを示します. 
 
      @Deprecated  現在の要素が推奨されていないことを示します. 
 
      @SuppressWarningsは、不適切なコンパイラ警告情報を閉じることを示します.
 
 
次に、注釈を実装します.
 
Annotationの一般的な形式:
 
public @interface MyAnnotation {  
    String value() default "hahaha";  
}  

 
 
@interfaceは実際にjava.lang.annotation.Annotationを継承しているので、annotationを定義する際に他のannotationやinterfaceを継承することはできません. 
    JAva.lang.annotation.RetentionはコンパイラにAnnotationの扱い方を教え、Retentionを使用する場合java.lang.annotation.RetentionPolicyの列挙値を提供する必要がある.
Javaコード 
 
public enum RetentionPolicy {  
    SOURCE, //       Annotation     class   
    CLASS, //     Annotation   class ,       
    RUNTIME //     Annotation   class ,        ,      
}   

 
 
    JAva.lang.annotation.Targetは、コンパイラAnnotationが使用する場所を示し、java.lang.annotation.ElementTypeの列挙値を指定する必要がある.
Javaコード 
 
public enum ElementType {  
    TYPE, //        class, interface, enum  
    FIELD, //        field  
    METHOD, //        method  
    PARAMETER, //        method   parameter  
    CONSTRUCTOR, //        constructor  
    LOCAL_VARIABLE, //              
    ANNOTATION_TYPE, //       annotation     
    PACKAGE //        package  
}   

 
 
    JAva.lang.annotation.Documentedは、このAnnotationがjavadocに書き込まれるかどうかを指定するために使用する. 
    JAva.lang.annotation.Inheritedは、親クラスに対してAnnotationを使用する場合にクラスに継承できるかどうかを指定するために使用する. 
のように
Javaコード 
 
import java.lang.annotation.ElementType;  
import java.lang.annotation.Retention;  
import java.lang.annotation.RetentionPolicy;  
import java.lang.annotation.Target;  
  
@Documented  //  Annotation     javadoc  
@Inherited       //  Annotation        
@Target({ElementType.CONSTRUCTOR,ElementType.METHOD}) //    Annotation               
@Retention(RetentionPolicy.CLASS) //    Annotation  class vm     
public @interface MyAnnotation {  
    String value() default "hahaha";  
}  

 
 
    JAva.lang.reflect.AnnotatedElementインタフェースでは、4つの方法でAnnotationにアクセスできます.
Javaコード 
 
public Annotation getAnnotation(Class annotationType);  
public Annotation[] getAnnotations();  
public Annotation[] getDeclaredAnnotations();  
public boolean isAnnotationPresent(Class annotationType);  

 
 
Class、Constructor、Field、Method、Packageなどが実現するこのインタフェースは、これらの方法でAnnotation情報にアクセスすることができ、アクセスするAnnotationがRUNTIMEとしてRetentionを指定することを前提とする.