- 既知のすべてのサブインタフェース:
ArrayType,DeclaredType,Element,ErrorType,ExecutableElement,ExecutableType,IntersectionType,ModuleElement,NoType,NullType,PackageElement,Parameterizable,PrimitiveType,QualifiedNameable,RecordComponentElement,ReferenceType,TypeElement,TypeMirror,TypeParameterElement,TypeVariable,UnionType,VariableElement,WildcardType
下記の定義において、注釈Aは注釈型ATを持っています。 ATが繰返し可能な注釈型の場合、包含する注釈の型はATCです。
次のいずれかが成り立つ場合に、注釈AはコンストラクトC上に直接存在しています。
- A 、Cのソース・コード表現への適用として宣言された「明示的または暗黙的」です。
通常、Cのソース・コード表現にAT型の注釈が1つだけ現れる場合、AはCに適用されるものとして明示的に宣言されています。 「レコード・コンポーネント」で、ATタイプの注釈を、関連するメンバーに暗黙的に伝播できます。 レコード・コンポーネントのタイプを変更するタイプ注釈は、必須メンバーにも伝播できます。 強制メンバーへの注釈の伝播は、「Java言語仕様」に付与されているルールによって管理されます。 CにATタイプの複数の注釈が存在する場合、ATが繰返し可能な注釈型である場合、CにおけるATCタイプの注釈は「暗黙のうちに宣言された」です。
- Aの表現は、クラス・ファイルの
RuntimeVisibleAnnotations(JVMS 4.7.16)、RuntimeVisibleParameterAnnotations(JVMS 4.7.17)属性など、Cの実行可能出力に表示されます。
次のいずれかが成り立つ場合に、注釈AはコンストラクトC上に存在しています。
- AがC上に直接存在しています。
- CにAT型の注釈が直接存在せず、Cはクラスであり、ATは継承可能で、CのスーパークラスにAが存在しています。
- ATは繰返し可能な注釈型であり、包含する注釈の型はATCです。
- CにATC型の注釈が直接存在しており、その直接存在しているATC型の注釈の
valueメソッドを呼び出した結果に注釈Aが含まれています。
- AがC上に直接または間接的に存在しています。
- CにAT型の注釈が直接にも間接的にも存在せず、Cはクラスであり、ATは継承可能で、CのスーパークラスにAが関連付けられています。
- Java言語仕様を参照してください:
-
「9.6 注釈インタフェース」
9.6.4.3@Inherited
「9.7.4 注釈が表示される場所」
「9.7.5 同じインタフェースの複数の注釈」 - 導入されたバージョン:
- 1.8
-
メソッドのサマリー
修飾子と型メソッド説明<A extends Annotation>
AgetAnnotation(Class<A> annotationType) 存在する場合は、この構造の指定された型の注釈を返し、そうでない場合はnullを返します。List<? extends AnnotationMirror>この構造に直接存在する注釈を返します。<A extends Annotation>
A[]getAnnotationsByType(Class<A> annotationType) この構造に関連付けられている注釈を返します。
-
メソッドの詳細
-
getAnnotationMirrors
List<? extends AnnotationMirror> getAnnotationMirrors()この構造に直接存在する注釈を返します。- 戻り値:
- このコンストラクトに直接存在する注釈。存在しない場合は空のリスト
-
getAnnotation
<A extends Annotation> A getAnnotation(Class<A> annotationType) 存在する場合は、この構造の指定された型の注釈を返し、そうでない場合はnullを返します。このメソッドが返す注釈には、
Class型の値を持つ要素が含まれる場合があります。 この値は直接返されません。つまり、クラス・ローダーを使用するための情報など、クラスを見つけてロードするのに必要な情報は利用できません。 返される注釈で関連するメソッドを呼び出すことによりClassオブジェクトを読み込もうとすると、MirroredTypeExceptionが発生します。これから、対応するTypeMirrorを抽出することができます。 同様に、Class[]の値を持つ要素を読み込もうとすると、MirroredTypesExceptionが発生します。ノート: このメソッドは、このインタフェースや関連するインタフェース内のほかのメソッドとは異なります。 このメソッドは、これらのインタフェースにより定義され、これらのインタフェースを通じて使用される表現に対して操作を行うのではなく、実行時リフレクト情報(仮想マシンに現在ロードされている注釈型の表現)に対して操作を行います。 その結果、返された注釈オブジェクトでメソッドを呼び出すと、コア・リフレクションによって返された注釈オブジェクトでメソッドを呼び出したときにスローされる可能性のある例外の多くがスローされることがあります。 このメソッドは、注釈型の既知の固定セットに対して操作を行うように記述された呼出し側を対象としています。
- 型パラメータ:
A- 注釈型- パラメータ:
annotationType- 注釈型に対応するClassオブジェクト- 戻り値:
- このような注釈がpresentの場合は指定された型のこのコンストラクト注釈、それ以外の場合は
null - Java言語仕様を参照してください:
-
9.6.1 注釈インタフェース要素
- 関連項目:
-
getAnnotationsByType
<A extends Annotation> A[] getAnnotationsByType(Class<A> annotationType) この構造に関連付けられている注釈を返します。 このコンストラクトに関連付けられている注釈がない場合、戻り値は長さ0の配列です。 コンストラクトCに直接または間接的に存在している注釈の順序の計算では、Cに間接的に存在している注釈は、そのコンテナ注釈の場所に、コンテナ注釈の値要素内に現れる順序で、Cに直接存在しているかのように扱われます。 このメソッドとgetAnnotation(Class)の違いとして、このメソッドは引数が繰返し可能な注釈型かどうかを検出し、繰返し可能な注釈型であれば、コンテナ注釈を調べることでその型の注釈を1つ以上見つけようとします。このメソッドから返される注釈には、
Class型の値を持つ要素が含まれている可能性があります。 この値は直接返されません。つまり、クラス・ローダーを使用するための情報など、クラスを見つけてロードするのに必要な情報は利用できません。 返される注釈で関連するメソッドを呼び出すことによりClassオブジェクトを読み込もうとすると、MirroredTypeExceptionが発生します。これから、対応するTypeMirrorを抽出することができます。 同様に、Class[]の値を持つ要素を読み込もうとすると、MirroredTypesExceptionが発生します。ノート: このメソッドは、このインタフェースや関連するインタフェース内のほかのメソッドとは異なります。 このメソッドは、これらのインタフェースにより定義され、これらのインタフェースを通じて使用される表現に対して操作を行うのではなく、実行時リフレクト情報(仮想マシンに現在ロードされている注釈型の表現)に対して操作を行います。 その結果、返された注釈オブジェクトでメソッドを呼び出すと、コア・リフレクションによって返された注釈オブジェクトでメソッドを呼び出したときにスローされる可能性のある例外の多くがスローされることがあります。 このメソッドは、注釈型の既知の固定セットに対して操作を行うように記述された呼出し側を対象としています。
- 型パラメータ:
A- 注釈型- パラメータ:
annotationType- 注釈型に対応するClassオブジェクト- 戻り値:
- 存在する場合は、このコンストラクトの指定された注釈型の注釈。そうでない場合は空の配列
- Java言語仕様を参照してください:
-
「9.6 注釈インタフェース」
「9.6.1 注釈インタフェース要素」 - 関連項目:
-