サブ定義annotationの作成方法およびJDK 5の使用方法0 annotationパッケージのannotations

3933 ワード

サブ定義annotationの作成方法およびJDK 5の使用方法0 annotationパッケージのannotationsのこのセクションでは、カスタム注釈タイプの作成方法とJDK 5の適用方法について説明します.0 java.lang.annotationパッケージで提供される4つの注記:
@Documented,@Retention,@Target,@Inherited
1.カスタム@Todo注記の作成
プログラムを書くとき、現在のバージョンでは機能が提供されていない場合や、他の理由で完了していない方法があり、後で完了する場合があります.javadocでは@TODOでこの動作を説明し、java注釈で実装します.
public @interface Todo { }//Todo.java
この注釈タイプを自省させたい場合は、@Todo注釈を付けて、以下のように書きます.
@Todopublic @interface Todo{ }
次に、この注釈にパラメータを受け入れる能力を示します.コードは次のとおりです.
@Todo("Just articleware")
public @interface Todo{
  public enum Priority { LOW, MEDIUM, HIGH }
  String value();
  String[] owners() default "";
  Priority priority() default Priority.MEDIUM;
}

注:注釈クラスが許容できるパラメータのタイプには、次のような厳しいルールがあります.
a.パラメータタイプは、primitive、String、Class、enum、annotation、または配列のみです.
b.パラメータ値は空にできないので、各パラメータ値はデフォルト値を定義しなければならない.
c.valueという名前のパラメータは簡単な方法で設定できます.
d.パラメータの書き方は、簡単な方法(上記のコードを参照)を書くのと同じで、パラメータの追加は許されず、throws句などは許されない.
上記のコードでは,@Todoにvalue,owners,priorityの3つのパラメータを定義した.注意:valueの特殊性のため、その省値は上のコードの「Just articleware」で定義できます.もちろん、デフォルト値を単独で書くこともできます.
@Todo注記を適用する例を次に示します.
@Todo(
  value="Class scope",
  priority=Unfinished.Priority.LOW
)
public class TodoDemo {

  @Todo("Constructor scope")//      ,  value  
  public TodoDemo() { }

  @Todo(owner="Jason", value="Method scope")
  public void foo() { }
}

上のコードは簡単で、あまり紹介しません.
次に、@Todoをfields、parameters、またはlocal variables(これは私たちにとって意味がないため)に適用できないようにしたいと思います.javadocに表示されるはずです.実行には持続性があります.これらの特性を実現するには、annotationパッケージのサポートが必要です.
2.annotationパッケージの適用サポート
1)@Documented
クラスとメソッドのannotationはデフォルトでjavadocには表示されません.この性質を加えるために@Documentedを使用します.
アプリケーションコードは以下の通りです(簡単で、あまり紹介しません):
package com.robin;
import java.lang.annotation.*;

@Todo("Just articleware")
@Documented
public @interface Todo{ ...

2)@Retention
あなたのannotationの有効期間を示すには、図に示すように3つの選択肢があります.
次のコード例はRUNTIMEポリシーを適用する
package com.robin;
import java.lang.annotation.*;

@Todo("Just articleware")
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface Todo{ ...

3) @Target
@Target注記は、どのターゲットに適用されるかを示し、次の範囲を選択できます.
  • ElementType.TYPE (class, interface, enum)
  • ElementType.FIELD (instance variable)
  • ElementType.METHOD ElementType.PARAMETER
  • ElementType.CONSTRUCTOR
  • ElementType.LOCAL_VARIABLE
  • ElementType.ANNOTATION_TYPE ( )
  • ElementType.PACKAGE

デルの機能要件に従って、コードは次のとおりです.
package com.robin;
import java.lang.annotation.*;

@Todo("Just articleware")
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE,ElementType.METHOD,
 ElementType.CONSTRUCTOR,ElementType.ANNOTATION_TYPE,
 ElementType.PACKAGE})
public @interface Todo{ ...

4) @Inherited
@Inheritedは、あるannotationを使用する親がこのannotationをサブクラスに適用できるかどうかを示します.
サンプルコードは次のとおりです.
package com.robin;
import java.lang.annotation.*;

@Todo("Just articleware")
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE,ElementType.METHOD,
 ElementType.CONSTRUCTOR,ElementType.ANNOTATION_TYPE,
 ElementType.PACKAGE})
@Inherited
public @interface Todo{
  public enum Priority { LOW, MEDIUM, HIGH }

  String value();
  String[] owners() default "";
  Priority priority() default Priority.MEDIUM;
}