サブ定義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{ }
次に、この注釈にパラメータを受け入れる能力を示します.コードは次のとおりです.
注:注釈クラスが許容できるパラメータのタイプには、次のような厳しいルールがあります.
a.パラメータタイプは、primitive、String、Class、enum、annotation、または配列のみです.
b.パラメータ値は空にできないので、各パラメータ値はデフォルト値を定義しなければならない.
c.valueという名前のパラメータは簡単な方法で設定できます.
d.パラメータの書き方は、簡単な方法(上記のコードを参照)を書くのと同じで、パラメータの追加は許されず、throws句などは許されない.
上記のコードでは,@Todoにvalue,owners,priorityの3つのパラメータを定義した.注意:valueの特殊性のため、その省値は上のコードの「Just articleware」で定義できます.もちろん、デフォルト値を単独で書くこともできます.
@Todo注記を適用する例を次に示します.
上のコードは簡単で、あまり紹介しません.
次に、@Todoをfields、parameters、またはlocal variables(これは私たちにとって意味がないため)に適用できないようにしたいと思います.javadocに表示されるはずです.実行には持続性があります.これらの特性を実現するには、annotationパッケージのサポートが必要です.
2.annotationパッケージの適用サポート
1)@Documented
クラスとメソッドのannotationはデフォルトでjavadocには表示されません.この性質を加えるために@Documentedを使用します.
アプリケーションコードは以下の通りです(簡単で、あまり紹介しません):
2)@Retention
あなたのannotationの有効期間を示すには、図に示すように3つの選択肢があります.
次のコード例はRUNTIMEポリシーを適用する
3) @Target
@Target注記は、どのターゲットに適用されるかを示し、次の範囲を選択できます.
デルの機能要件に従って、コードは次のとおりです.
4) @Inherited
@Inheritedは、あるannotationを使用する親がこのannotationをサブクラスに適用できるかどうかを示します.
サンプルコードは次のとおりです.
@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;
}