Javaの注記Annotation
3079 ワード
Annotationはjava.lang.annotation.Annotationから継承するクラスであり、プログラム解析ツールや仮想マシンにpackage class field methedなどの情報を提供するためのものであり、使用方法以外は他のクラスと何ら変わらない.
注釈の文法は比較的簡単で、@記号の使用を除いてjavaの固有の文法と基本的に一致している.
実はjdkにはjava.langパッケージに定義されたいくつかの私たちがよく使う注釈が内蔵されています.これらは次のとおりです.
@Overrideは、現在のメソッドが親を上書きするメソッドであることを示します.
@Deprecated 現在の要素が推奨されていないことを示します.
@SuppressWarningsは、不適切なコンパイラ警告情報を閉じることを示します.
次に、注釈を実装します.
Annotationの一般的な形式:
@interfaceは実際にjava.lang.annotation.Annotationを継承しているので、annotationを定義する際に他のannotationやinterfaceを継承することはできません.
JAva.lang.annotation.RetentionはコンパイラにAnnotationの扱い方を教え、Retentionを使用する場合java.lang.annotation.RetentionPolicyの列挙値を提供する必要がある.
Javaコード
JAva.lang.annotation.Targetは、コンパイラAnnotationが使用する場所を示し、java.lang.annotation.ElementTypeの列挙値を指定する必要がある.
Javaコード
JAva.lang.annotation.Documentedは、このAnnotationがjavadocに書き込まれるかどうかを指定するために使用する.
JAva.lang.annotation.Inheritedは、親クラスに対してAnnotationを使用する場合にクラスに継承できるかどうかを指定するために使用する.
のように
Javaコード
JAva.lang.reflect.AnnotatedElementインタフェースでは、4つの方法でAnnotationにアクセスできます.
Javaコード
Class、Constructor、Field、Method、Packageなどが実現するこのインタフェースは、これらの方法でAnnotation情報にアクセスすることができ、アクセスするAnnotationがRUNTIMEとしてRetentionを指定することを前提とする.
注釈の文法は比較的簡単で、@記号の使用を除いて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を指定することを前提とする.