IAnnotatedElement インターフェイス

定義

この VM で現在実行されているプログラムの注釈付き要素を表します。

[Android.Runtime.Register("java/lang/reflect/AnnotatedElement", "", "Java.Lang.Reflect.IAnnotatedElementInvoker")]
public interface IAnnotatedElement : Android.Runtime.IJavaObject, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("java/lang/reflect/AnnotatedElement", "", "Java.Lang.Reflect.IAnnotatedElementInvoker")>]
type IAnnotatedElement = interface
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
派生
属性
実装

注釈

この VM で現在実行されているプログラムの注釈付き要素を表します。 このインターフェイスを使用すると、注釈を反射的に読み取ることができます。 このインターフェイスのメソッドによって返されるすべての注釈は、変更不可でシリアル化可能です。 このインターフェイスのメソッドによって返される配列は、他の呼び出し元に返される配列に影響を与えずに、呼び出し元によって変更される可能性があります。

Android の注意: #getAnnotations()#getDeclaredAnnotations() など、さまざまな型の複数の注釈を返すメソッドは、DEX 形式で指定された注釈型の明示的な文字コード順序の影響を受ける可能性があります。 1 つの要素上の異なる型の注釈は、ソースで宣言されている順序で返される保証はありません。

#getAnnotationsByType(Class)メソッドと #getDeclaredAnnotationsByType(Class) メソッドは、要素で同じ型の複数の注釈をサポートします。 いずれかのメソッドの引数が反復可能な注釈型 (JLS 9.6) の場合、メソッドはコンテナー注釈 (JLS 9.7) を "検索" し、存在する場合はコンテナー内の注釈を返します。 コンテナー注釈はコンパイル時に生成され、引数型の複数の注釈をラップできます。

<em>間接的に存在する</em>、<em></em>、<em>present</em>、および<em>関連付け</em>はこのインターフェイス全体で使用され、メソッドによって返される注釈を正確に記述します。

<ul>

<li> E が元のソースの A によって注釈付け<要素 > に注釈 < が>em間接的に存在/em

<li>E が A のコンテナー注釈によって注釈付け<要素 > に<em>間接的に存在/em

<li>次のいずれかの場合、要素 E に注釈 A が存在します。

<ul>

<li>AE に直接存在します。

<li>Aの型の注釈はEに直接存在しません。Eはクラスであり、Aの型は継承可能であり、AEのスーパークラスに存在します。

</ul>

<li>A の注釈は、次のいずれかの場合に要素 < で>em<関連付け>/emされます。

<ul>

<li>A が直接または間接的に E に存在する。

<li>A の型の注釈は E に直接または間接的に存在しません。E はクラスであり、A の型は継承可能であり、AE のスーパークラスに関連付けられています。

</ul>

</ul>

次の表は、このインターフェイスで調べるさまざまな方法の注釈の種類をまとめたものです。

<table class="plain"><caption>異なる AnnotatedElement メソッドによって検出されたプレゼンスの種類のオーバービュー</caption><thead><tr><th colspan=2 scope="col">Method</th><th colspan=4 scope="col">KinKin presence</th><tr><th scope="col">Return Type</th><th scope="col">Signature</th><th scope="col">Directly Present</th><th scope="col">間接的に Present</th><th scope="col">Present</th><th scope="col">Associated</th>< /thead><tbody><tr><td style="text-align:right">T</td><th scope="row" style="font-weight:normal; text-align:left">#getAnnotation(Class) getAnnotation(Class&lt;T&gt;)<td></td><td></td><td style="text-align:center">X</td><td></td></tr><tr><td style="text-align:right">Annotation[]</td><th scope="row" style="font-weight:normal; text-align:left">#getAnnotations getAnnotations()<td></td><td></td><td style="text-align:center" >X</td><td></td></tr><tr><td style="text-align:right">T[]</td><th scope="row" style="font-weight:normal; text-align:left">#getAnnotationsByType(Class) getAnnotationsByType(Class&lt;T&gt;)<td></td><td></td><td></td><td style="text-align:center">X</td></tr><tr><td style="text-align:right">T</td><th scope="row" style="font-weight:normal; text-align:left">#getDeclaredAnnotation(Class) getDeclaredAnnotation(Class&lt;T&gt;)<td style="text-align:center">X</td><td></td><td></td ><td></td></tr><tr><td style="text-align:right">Annotation[]</td><th scope="row" style="font-weight:normal;text-align:left">#getDeclaredAnnotations getDeclaredAnnotations()<td style="text-align:center">X</td><td></td><td></td><></td></tr><tr><td style="text-align:right">T[]</td><th scope="row" style="font-weight:normal; text-align:left">#getDeclaredAnnotationsByType(Class) getDeclaredAnnotationsByType(Class&lt;T&gt;)<td style="text-align:center">X</td><td style="text-align:center">X</td><td></td><td></td></tr></tbody></table>

get[Declared]AnnotationsByType( Class < T >)の呼び出しの場合、要素 E に直接または間接的に存在する注釈の順序は、コンテナー注釈の代わりに E に間接的に存在する注釈が、コンテナー注釈の value 要素に出現する順序で E に直接存在するかのように計算されます。

注釈型 T が最初に <em>/em</em である場合> 繰り返し可能に変更互換性に関する懸念事項がいくつかあります。

T の包含注釈の種類は TC です。

<ul>

<li>Tを反復可能に変更することは、Tの既存の使用およびTCの既存の使用と互換性のあるソースおよびバイナリである。

つまり、ソース互換性のために、 T 型または TC 型の注釈を持つソース コードはコンパイルされます。 バイナリ互換性のために、 T 型または TC 型の注釈を持つクラス ファイル (または T 型または TC 型の他の種類の 使用) を持つクラス ファイルは、以前のバージョンにリンクされている場合、変更された バージョンの T に対してリンクされます。

(注釈型 TC は、 T が正式に反復可能に変更される前に、注釈型を含む動作として非公式に機能する場合があります。あるいは、 T を反復可能にした場合、 TC を新しいタイプとして導入することができます。

<li>注釈の種類 TC が要素に存在し、 T が TC を含む注釈 型として繰 り返し可能に変更された場合は、次のようになります。

<ul>

<li> T への変更は、T の包含注釈get[Declared]Annotation(Class<T>)メソッドの結果は変更されないため、 (T または get[Declared]Annotations() の引数で呼び出される) およびメソッドに対して動作的に互換性があります。

<li>T に対する変更get[Declared]AnnotationsByType(Class<T>) の引数を使用して呼び出された メソッドの結果が変更されます。これらのメソッドは、T のコンテナー注釈として TC 型の注釈を認識し、T 型の注釈を公開するためにそれを "検索" するためです。

</ul>

<li>型 T の注釈が要素に存在し、T が繰り返し可能になり、T 型の注釈が要素に追加される場合:

<ul>

<li>T 型の注釈の追加は、ソース互換とバイナリ互換の両方です。

<li>T型の注釈を追加すると、get[Declared]Annotation(Class<T>)メソッドとget[Declared]Annotations()メソッドの結果が変わります。これらのメソッドでは要素に対するコンテナー注釈のみが表示され、T 型の注釈は表示されないためです。

<li>T型の注釈を追加すると、get[Declared]AnnotationsByType(Class<T>)メソッドの結果が変わります。これは、結果がT型の追加の注釈を公開するのに対し、以前はT型の単一の注釈しか公開しなかったためです。

</ul>

</ul>

このインターフェイス内のメソッドによって返される注釈に、この VM でアクセスできないクラスを参照する Class値のメンバーが (直接または間接的に) 含まれている場合、返された注釈で関連するクラスを返すメソッドを呼び出してクラスを読み取ろうとすると、 TypeNotPresentExceptionが発生します。

同様に、列挙型のメンバーを読み取ろうとすると、注釈の列挙型定数が列挙型に存在しなくなった場合、 EnumConstantNotPresentException が発生します。

注釈型 T に値要素が @Repeatable 型を示す注釈で注釈が付けられた場合、TCvalue() の戻り値の型を持つ[] メソッドを宣言しない場合、java.lang.annotation.AnnotationFormatError型の例外がスローされます。

最後に、定義が非互換性に進化したメンバーを読み取ろうとすると、 java.lang.annotation.AnnotationTypeMismatchException または java.lang.annotation.IncompleteAnnotationExceptionが発生します。

1\.5 で追加されました。

Javaドキュメント。

このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。

プロパティ

名前 説明
Handle

基になる Android オブジェクトの JNI 値を取得します。

(継承元 IJavaObject)
JniIdentityHashCode

ラップされたインスタンスの java.lang.System.identityHashCode() の値を返します。

(継承元 IJavaPeerable)
JniManagedPeerState

マネージド ピアの状態。

(継承元 IJavaPeerable)
JniObjectReferenceControlBlock

この VM で現在実行されているプログラムの注釈付き要素を表します。

(継承元 IJavaPeerable)
JniPeerMembers

メンバー アクセスと呼び出しのサポート。

(継承元 IJavaPeerable)
PeerReference

ラップされたJava オブジェクト インスタンスのJniObjectReferenceを返します。

(継承元 IJavaPeerable)

メソッド

名前 説明
Disposed()

インスタンスが破棄されたときに呼び出されます。

(継承元 IJavaPeerable)
DisposeUnlessReferenced()

このインスタンスへの未処理の参照がない場合は、 Dispose()を呼び出します。それ以外の場合は何も実行しません。

(継承元 IJavaPeerable)
Finalized()

インスタンスが終了したときに呼び出されます。

(継承元 IJavaPeerable)
GetAnnotation(Class)

このような注釈が <em>present</em>、それ以外の場合は、指定した型に対してこの要素の注釈を返します。

GetAnnotations()

この要素に <em>present</em> 注釈を返します。

GetAnnotationsByType(Class)

この要素に <em>関連付け</em> 注釈を返します。

GetDeclaredAnnotation(Class)

このような注釈が <em>間接的に存在する場合は、指定した型に対してこの要素の注釈</em>、それ以外の場合は null を返します。

GetDeclaredAnnotations()

この要素に間接的に存在する<em></em>注釈を返します。

GetDeclaredAnnotationsByType(Class)

このような注釈が <em>間接的に存在する場合、または</em> または <em>間接的に存在する</em>場合は、指定した型に対してこの要素の注釈を返します。

IsAnnotationPresent(Class)

指定した型の注釈がこの要素で <em>present</em> の場合は true、それ以外の場合は false を返します。

SetJniIdentityHashCode(Int32)

JniIdentityHashCodeによって返される値を設定します。

(継承元 IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

この VM で現在実行されているプログラムの注釈付き要素を表します。

(継承元 IJavaPeerable)
SetPeerReference(JniObjectReference)

PeerReferenceによって返される値を設定します。

(継承元 IJavaPeerable)
UnregisterFromRuntime()

ランタイムが将来の Java.Interop.JniRuntime+JniValueManager.PeekValue 呼び出しから返されないように、このインスタンスの登録を解除します。

(継承元 IJavaPeerable)

拡張メソッド

名前 説明
GetJniTypeName(IJavaPeerable)

インスタンス selfの型の JNI 名を取得します。

JavaAs<TResult>(IJavaPeerable)

selfを強制的にTResult入力し、強制型がJava側で有効であることを確認します。

JavaCast<TResult>(IJavaObject)

Android ランタイムチェック型変換を実行します。

JavaCast<TResult>(IJavaObject)

この VM で現在実行されているプログラムの注釈付き要素を表します。

TryJavaCast<TResult>(IJavaPeerable, TResult)

selfを強制的にTResult入力し、強制型がJava側で有効であることを確認します。

適用対象