public interface AnnotatedElement
getAnnotationsByType(Class)
メソッドおよびgetDeclaredAnnotationsByType(Class)
メソッドでは、1つの要素における同じ型の複数の注釈がサポートされます。いずれかのメソッドの引数が繰返し可能な注釈型(JLS 9.6)である場合、メソッドはコンテナ注釈(JLS 9.7)を調べて、存在する場合はコンテナ内にあるすべての注釈を返します。コンテナ注釈は、引数の型の複数の注釈をラップするために、コンパイル時に生成できます。
メソッドによって返される注釈を正確に記述するために、次のように、直接存在する、間接的に存在する、存在するおよび関連付けられているという用語がこのインタフェース全体で使用されます。
RuntimeVisibleAnnotations
またはRuntimeVisibleParameterAnnotations
またはRuntimeVisibleTypeAnnotations
属性を持ち、その属性に注釈Aが含まれている場合、AはEに直接存在する。
RuntimeVisibleAnnotations
またはRuntimeVisibleParameterAnnotations
またはRuntimeVisibleTypeAnnotations
属性を持ち、注釈Aの型が繰返し可能であり、その属性に、Aが含まれる値要素およびAの型の包含する注釈型である型を持つ、厳密に1つの注釈が含まれている場合、AはEに間接的に存在する。
次の表は、このインタフェースにおけるさまざまなメソッドによって検査される注釈の存在の種類を要約したものです。
存在の種類 | |||||
---|---|---|---|---|---|
メソッド | 直接存在する | 間接的に存在する | 存在する | 関連付けられている | |
T | getAnnotation(Class<T>)
| X | |||
Annotation[] | getAnnotations()
| X | |||
T[] | getAnnotationsByType(Class<T>)
| X | |||
T | getDeclaredAnnotation(Class<T>)
| X | |||
Annotation[] | getDeclaredAnnotations()
| X | |||
T[] | getDeclaredAnnotationsByType(Class<T>)
| X | X |
get[Declared]AnnotationsByType( Class < T >)
の呼び出しでは、要素Eに直接または間接的に存在する注釈の順序は、Eに間接的に存在する注釈が、コンテナ注釈の代わりに、コンテナ注釈の値要素に現れる順序でEに直接存在するかのように計算されます。
注釈型Tがもともと繰返し可能ではなく、後で繰返し可能に変更された場合は、いくつかの互換性に関する問題に注意してください。Tの包含する注釈型はTCです。
get[Declared]Annotation(Class<T>)
メソッド(TまたはTCの引数を指定して呼び出される)およびget[Declared]Annotations()
メソッドに関しては動作に互換性があります。これは、TCがTの包含する注釈型になってもメソッドの結果が変化しないためです。
get[Declared]AnnotationsByType(Class<T>)
メソッドの結果が変化します。これは、これらのメソッドで、型TCの注釈がTのコンテナ注釈として認識されるようになり、型Tの注釈を公開するためにこれが調べられるためです。
get[Declared]Annotation(Class<T>)
メソッドおよびget[Declared]Annotations()
メソッドの結果が変化します。これは、これらのメソッドで、型Tの1つの注釈が確認されるのではなく、要素におけるコンテナ注釈のみが確認されるようになったためです。
get[Declared]AnnotationsByType(Class<T>)
メソッドの結果が変化します。これは、それらの結果によって型Tの追加の注釈が公開されるためですが、以前は型Tの単一の注釈のみが公開されていました。
このインタフェースのメソッドにより返された注釈が、このVMでアクセスできないクラスを参照しているClass
の値を持つメンバーを(直接または間接に)含む場合、関連するクラスを返すメソッドを返された注釈で呼び出してクラスを読み取ろうとすると、TypeNotPresentException
がスローされます。
同様に、注釈の列挙定数が列挙型にもはや存在しない場合に、列挙値を持つメンバーを読み取ろうとすると、EnumConstantNotPresentException
がスローされます。
注釈型Tが@Repeatable
注釈によって(メタ)注釈が付けられており、その注釈の値要素で型TCが指定されているが、TCではT[]
の戻り型を持つvalue()
メソッドが宣言されていない場合、型AnnotationFormatError
の例外がスローされます。
最後に、互換性なく開発された定義を持つメンバーを読み取ろうとすると、AnnotationTypeMismatchException
またはIncompleteAnnotationException
がスローされます。
修飾子と型 | メソッドと説明 |
---|---|
<T extends Annotation> |
getAnnotation(Class<T> annotationClass)
存在する場合は、この要素の指定された型の注釈を返し、そうでない場合はnullを返します。
|
Annotation[] |
getAnnotations()
この要素に存在する注釈を返します。
|
default <T extends Annotation> |
getAnnotationsByType(Class<T> annotationClass)
この要素に関連付けられている注釈を返します。
|
default <T extends Annotation> |
getDeclaredAnnotation(Class<T> annotationClass)
直接存在する場合は、この要素の指定された型の注釈を返し、そうでない場合はnullを返します。
|
Annotation[] |
getDeclaredAnnotations()
この要素に直接存在する注釈を返します。
|
default <T extends Annotation> |
getDeclaredAnnotationsByType(Class<T> annotationClass)
直接存在するか間接的に存在する場合は、この要素の指定された型の注釈を返します。
|
default boolean |
isAnnotationPresent(Class<? extends Annotation> annotationClass)
指定された型の注釈がこの要素に存在する場合はtrueを返し、そうでない場合はfalseを返します。
|
default boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)
このメソッドによって返されるtrue値は、getAnnotation(annotationClass) != null
と同等です。
デフォルト・メソッドの本体は、前述のコードとして指定されています。
annotationClass
- 注釈型に対応するClassオブジェクトNullPointerException
- 指定された注釈クラスがnullの場合<T extends Annotation> T getAnnotation(Class<T> annotationClass)
T
- 照会し、存在する場合に返す注釈の型。annotationClass
- 注釈型に対応するClassオブジェクトNullPointerException
- 指定された注釈クラスがnullの場合Annotation[] getAnnotations()
default <T extends Annotation> T[] getAnnotationsByType(Class<T> annotationClass)
getAnnotation(Class)
の違いは、このメソッドではその引数が繰返し可能な注釈型(JLS 9.6)であるかどうかが検出され、繰返し可能な注釈型である場合は、コンテナ注釈を調べることで、その型の1つ以上の注釈の検索が試みられることです。このメソッドの呼出し元は、返された配列を自由に変更することができ、これはほかの呼出し元に返された配列に影響を及ぼしません。annotationClass
を渡してgetDeclaredAnnotationsByType(Class)
が呼び出されます。返された配列の長さが0より大きい場合は、その配列が返されます。返された配列の長さが0であり、このAnnotatedElement
がクラスであり、引数の型が継承可能な注釈型であり、このAnnotatedElement
のスーパークラスがnullでない場合、返される結果は、引数としてannotationClass
を指定してスーパークラスに対してgetAnnotationsByType(Class)
を呼び出した結果です。それ以外の場合、長さゼロの配列が返されます。T
- 照会し、存在する場合に返す注釈の型。annotationClass
- 注釈型に対応するClassオブジェクトNullPointerException
- 指定された注釈クラスがnullの場合default <T extends Annotation> T getDeclaredAnnotation(Class<T> annotationClass)
getDeclaredAnnotations()
の結果に対するループが実行されて、注釈型が引数の型に一致する最初の注釈が返されます。T
- 照会し、直接存在する場合に返す注釈の型。annotationClass
- 注釈型に対応するClassオブジェクトNullPointerException
- 指定された注釈クラスがnullの場合default <T extends Annotation> T[] getDeclaredAnnotationsByType(Class<T> annotationClass)
getDeclaredAnnotation(Class)
の違いは、このメソッドではその引数が繰返し可能な注釈型(JLS 9.6)であるかどうかが検出され、繰返し可能な注釈型である場合は、コンテナ注釈(存在する場合)を調べることで、その型の1つ以上の注釈の検索が試みられることです。このメソッドの呼出し元は、返された配列を自由に変更することができ、これはほかの呼出し元に返された配列に影響を及ぼしません。getDeclaredAnnotation(Class)
を1回以上呼び出して、直接存在する注釈を探したり、その注釈型が繰返し可能である場合は、コンテナ注釈を探したりすることができます。注釈型annotationClass
の注釈が直接かつ間接的に存在することがわかった場合は、getDeclaredAnnotations()
が呼び出され、返される配列内での要素の順序が決定されます。
または、デフォルトの実装で、getDeclaredAnnotations()
を1回呼び出し、返された配列を、直接存在する注釈と間接的に存在する注釈の両方について検査することもできます。getDeclaredAnnotations()
の呼び出しの結果は、getDeclaredAnnotation(Class)
の呼び出しの結果と一致すると見なされます。
T
- 照会し、直接または間接的に存在する場合に返す注釈の型。annotationClass
- 注釈型に対応するClassオブジェクトNullPointerException
- 指定された注釈クラスがnullの場合Annotation[] getDeclaredAnnotations()
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.