Javaは、メタデータ、注釈のカスタム注釈のための4つの修正を提供します:
ターゲット@、保存、文書化および@Inheritedの@ @
@目標:
:要素の共通の属性値のみプログラム変更するためのカスタム注釈を指定するための改良
ElementType.FIELD:グローバル属性が適用さ
ElementType.METHOD:メソッドは適用され
ElementType.PARAMETERを:メソッドのパラメータが適用されます
のElementTypeを。タイプ:クラス、インタフェース、または列挙宣言に適用
@保持
@Retention:カスタム注釈を指定するためには、長い保持するように変更することができ、メタデータ注釈は、次のプロパティの値があります。
RetentionPolicy.SOURCE:コンパイラが変更された注釈を破棄します。
RetentionPolicy.CLASS:デフォルト値は、あなたがJavaプログラムを実行すると、コンパイラは、クラスファイルにメモを記録し、仮想マシンは、もはやReserved注であり、
RetentionPolicy.RUNTIMEは:Javaプログラムを実行するときに、コンパイラは、クラスファイルにメモを記録します、仮想マシン注予約するとき、プログラムは、反射による注釈を取得することができます。
@Documented
javadocコマンドが実行され、文書の修正メタ注釈カスタム注釈が生成されます
@遺伝性の
親クラスのノートが@Inherited修正を使用した場合、サブクラスはノートを継承することができ、または継承することはできません。
総合的な例:
@Target(ElementType.TYPE)//只能应用于类
@Retention(RetentionPolicy.RUNTIME)//由于是.RUNTIME,所以注解可以作用到运行时,所以控制台可以输出。默认为.CLASS,即作用到编译为class文件,无法作用到程序运行时,即无法作用到控制台。
@Inherited//如果不写该注解,则子类无法继承该注解,则控制台不会输出
public @interface Parent{
String key();
String value();
}
@Parent(key = "name", value = "张三")//自定义注解
public class Parent {
}
public class Son extends Parent {
public static void main(String[] args) {
Annotation[] annotations = Son.class.getAnnotations();
// 控制台输出[@venus.Parent(key=name, value=张三)]
System.out.println(Arrays.toString(annotations));
}
}