IAnnotatedElement Antarmuka

Definisi

Mewakili elemen anotasi dari program yang saat ini berjalan di VM ini.

[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
Turunan
Atribut
Penerapan

Keterangan

Mewakili elemen anotasi dari program yang saat ini berjalan di VM ini. Antarmuka ini memungkinkan anotasi dibaca secara reflektif. Semua anotasi yang dikembalikan oleh metode dalam antarmuka ini tidak dapat diubah dan dapat diserialisasikan. Array yang dikembalikan oleh metode antarmuka ini dapat dimodifikasi oleh penelepon tanpa memengaruhi array yang dikembalikan ke pemanggil lain.

Catatan Android: metode yang mengembalikan beberapa anotasi dari berbagai jenis seperti #getAnnotations() dan #getDeclaredAnnotations() dapat dipengaruhi oleh urutan kode karakter eksplisit dari jenis anotasi yang ditentukan oleh format DEX. Anotasi dari berbagai jenis pada satu elemen tidak dijamin akan dikembalikan dalam urutan yang dideklarasikan dalam sumber.

Metode #getAnnotationsByType(Class) dan #getDeclaredAnnotationsByType(Class) mendukung beberapa anotasi dengan jenis yang sama pada elemen. Jika argumen ke salah satu metode adalah jenis anotasi berulang (JLS 9.6), maka metode akan "menelusuri" anotasi kontainer (JLS 9.7), jika ada, dan mengembalikan anotasi apa pun di dalam kontainer. Anotasi kontainer dapat dihasilkan pada waktu kompilasi untuk membungkus beberapa anotasi jenis argumen.

Istilah <em langsung hadir> / em<, >em<secara tidak langsung hadir> / em<, >em<hadir> / em<, dan >em<terkait> / em< digunakan di seluruh antarmuka ini untuk menggambarkan dengan tepat anotasi mana yang>dikembalikan oleh metode:

<ul>

<li> Anotasi A adalah <em>langsung hadir</em> pada elemen E jika E diannotasikan oleh A di sumber asli.

<li>Anotasi A secara <tidak langsung> menyajikan</em> pada elemen E jika E diannotasi oleh anotasi kontainer A.

<li>Anotasi A ada pada elemen E jika:

<ul>

<li>A langsung ada di E; atau

<li>Tidak ada anotasi jenis A yang langsung ada di E, dan E adalah kelas, dan jenis A dapat diwariskan, dan A hadir di kelas super E.

</ul>

<li>Anotasi A adalah <em>dikaitkan</em> dengan elemen E jika:

<ul>

<li>A secara langsung atau tidak langsung ada di E; atau

<li>Tidak ada anotasi jenis A secara langsung atau tidak langsung ada di E, dan E adalah kelas, dan jenis A dapat diwariskan, dan A dikaitkan dengan superkelas E.

</ul>

</ul>

Tabel di bawah ini meringkas jenis anotasi mana yang memiliki metode yang berbeda dalam pemeriksaan antarmuka ini.

<table class="plain"><caption>Ringkasan jenis kehadiran yang terdeteksi oleh berbagai metode</keterangan><thead><tr><th colspan=2 scope="col">Method</th th><colspan=4 scope="col">Kind of Presence</th><tr><th scope="col">Return Type</th><scope="col">Signature</th><scope="col">Directly Present</th><scope="col">Secara tidak langsung Sajikan</th><scope="col">Present</th th><scope="col">Associated</th></thead><tbody><tr><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><><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><><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 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><><td style="text-align:right">Annotation[]</td><th scope="row" style=" bobot font:normal; text-align:left">#getDeclaredAnnotations getDeclaredAnnotations()<td style="text-align:center">X</td><td></td><td></td><></td/td></tr><tr><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>

Untuk pemanggilan get[Declared]AnnotationsByType( Class < T >), urutan anotasi yang secara langsung atau tidak langsung ada pada elemen E dihitung seolah-olah secara tidak langsung menyajikan anotasi pada E langsung ada pada E sebagai pengganti anotasi kontainer mereka, dalam urutan muncul dalam elemen nilai anotasi kontainer.

Ada beberapa masalah kompatibilitas yang perlu diingat jika jenis anotasi T awalnya <>tidak</em> dapat diulang dan kemudian dimodifikasi agar dapat diulang.

Jenis anotasi yang berisi untuk T adalah TC.

<ul>

<li>Memodifikasi T agar dapat diulang adalah sumber dan biner yang kompatibel dengan penggunaan T yang ada dan dengan penggunaan TC yang ada.

Artinya, untuk kompatibilitas sumber, kode sumber dengan anotasi jenis T atau jenis TC masih akan dikompilasi. Untuk kompatibilitas biner, file kelas dengan anotasi jenis T atau jenis TC (atau dengan jenis penggunaan lain dari jenis T atau jenis TC) akan ditautkan terhadap versi T yang dimodifikasi jika ditautkan terhadap versi sebelumnya.

(Jenis anotasi TC dapat berfungsi secara informal sebagai tindakan yang berisi jenis anotasi sebelum T dimodifikasi agar dapat diulang secara resmi. Atau, ketika T dibuat berulang, TC dapat diperkenalkan sebagai jenis baru.)

<li>Jika jenis anotasi TC ada pada elemen, dan T dimodifikasi agar dapat diulang dengan TC sebagai yang berisi jenis anotasi maka:

<ul>

<li>Perubahan T kompatibel secara perilaku sehubungan get[Declared]Annotation(Class<T>) dengan (dipanggil dengan argumen T atau TC) dan get[Declared]Annotations() metode karena hasil metode tidak akan berubah karena TC menjadi jenis anotasi yang mengandung untuk T.

<li>Perubahan T mengubah hasil get[Declared]AnnotationsByType(Class<T>) metode yang disebut dengan argumen T, karena metode tersebut sekarang akan mengenali anotasi jenis TC sebagai anotasi kontainer untuk T dan akan "menelusuri" untuk mengekspos anotasi jenis T.

</ul>

<li>Jika anotasi jenis T ada pada elemen dan T dibuat berulang dan lebih banyak anotasi jenis T ditambahkan ke elemen:

<ul>

<li> Penambahan anotasi jenis T kompatibel dengan sumber dan kompatibel biner.

<li>Penambahan anotasi jenis T mengubah hasil metode dan get[Declared]Annotation(Class<T>) metode, karena metode tersebut get[Declared]Annotations() sekarang hanya akan melihat anotasi kontainer pada elemen dan tidak melihat anotasi jenis T.

<li>Penambahan anotasi jenis T mengubah hasil get[Declared]AnnotationsByType(Class<T>) metode, karena hasilnya akan mengekspos anotasi tambahan jenis T sedangkan sebelumnya mereka hanya mengekspos satu anotasi jenis T.

</ul>

</ul>

Jika anotasi yang dikembalikan oleh metode dalam antarmuka ini berisi (secara langsung atau tidak langsung) Classanggota bernilai -yang mengacu pada kelas yang tidak dapat diakses dalam VM ini, mencoba membaca kelas dengan memanggil metode pengembalian Kelas yang relevan pada anotasi yang dikembalikan akan menghasilkan TypeNotPresentException.

Demikian pula, mencoba membaca anggota bernilai enum akan menghasilkan EnumConstantNotPresentException jika konstanta enum dalam anotasi tidak lagi ada dalam jenis enum.

Jika jenis anotasi T (meta-)dianotasi dengan anotasi @Repeatable yang elemen nilainya menunjukkan jenis TC, tetapi TC tidak mendeklarasikan value() metode dengan jenis pengembalian T[], maka pengecualian jenis java.lang.annotation.AnnotationFormatError dilemparkan.

Akhirnya, mencoba membaca anggota yang definisinya telah berkembang dengan tidak kompatibel akan mengakibatkan java.lang.annotation.AnnotationTypeMismatchException atau java.lang.annotation.IncompleteAnnotationException.

Ditambahkan dalam 1.5.

Dokumentasi Java untuk java.lang.reflect.AnnotatedElement.

Bagian dari halaman ini adalah modifikasi berdasarkan pekerjaan yang dibuat dan dibagikan oleh Android Open Source Project dan digunakan sesuai dengan istilah yang dijelaskan dalam Lisensi Creative Commons 2.5 Lisensi Atribusi.

Properti

Nama Deskripsi
Handle

Mendapatkan nilai JNI dari objek Android yang mendasar.

(Diperoleh dari IJavaObject)
JniIdentityHashCode

Mengembalikan nilai java.lang.System.identityHashCode() untuk instans yang dibungkus.

(Diperoleh dari IJavaPeerable)
JniManagedPeerState

Status serekan terkelola.

(Diperoleh dari IJavaPeerable)
JniPeerMembers

Akses anggota dan dukungan pemanggilan.

(Diperoleh dari IJavaPeerable)
PeerReference

Mengembalikan instans objek Java yang dibungkusJniObjectReference.

(Diperoleh dari IJavaPeerable)

Metode

Nama Deskripsi
Disposed()

Dipanggil ketika instans telah dibuang.

(Diperoleh dari IJavaPeerable)
DisposeUnlessReferenced()

Jika tidak ada referensi yang luar biasa untuk instans ini, maka panggilan Dispose(); jika tidak, tidak melakukan apa pun.

(Diperoleh dari IJavaPeerable)
Finalized()

Dipanggil ketika instans telah diselesaikan.

(Diperoleh dari IJavaPeerable)
GetAnnotation(Class)

Mengembalikan anotasi elemen ini untuk jenis yang ditentukan jika anotasi tersebut adalah <em>present</em>, atau null.

GetAnnotations()

Mengembalikan anotasi yang merupakan em<present></em> pada elemen ini.

GetAnnotationsByType(Class)

Mengembalikan anotasi yang diasosiasikan<></em> dengan elemen ini.

GetDeclaredAnnotation(Class)

Mengembalikan anotasi elemen ini untuk jenis yang ditentukan jika anotasi tersebut langsung ada<></em>, atau null.

GetDeclaredAnnotations()

Mengembalikan anotasi yang mereka <>sajikan< secara langsung/em> pada elemen ini.

GetDeclaredAnnotationsByType(Class)

Mengembalikan anotasi elemen ini untuk jenis yang ditentukan jika anotasi tersebut langsung< ada></em> atau <em>secara tidak langsung menyajikan</em>.

IsAnnotationPresent(Class)

Mengembalikan true jika anotasi untuk jenis yang ditentukan adalah <em>present</em> pada elemen ini, atau false.

SetJniIdentityHashCode(Int32)

Atur nilai yang dikembalikan oleh JniIdentityHashCode.

(Diperoleh dari IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

Mewakili elemen anotasi dari program yang saat ini berjalan di VM ini.

(Diperoleh dari IJavaPeerable)
SetPeerReference(JniObjectReference)

Atur nilai yang dikembalikan oleh PeerReference.

(Diperoleh dari IJavaPeerable)
UnregisterFromRuntime()

Batalkan pendaftaran instans ini sehingga runtime tidak akan mengembalikannya dari pemanggilan di masa mendatang Java.Interop.JniRuntime+JniValueManager.PeekValue .

(Diperoleh dari IJavaPeerable)

Metode Ekstensi

Nama Deskripsi
GetJniTypeName(IJavaPeerable)

Mendapatkan nama JNI dari jenis instans self.

JavaAs<TResult>(IJavaPeerable)

Cobalah untuk memaksa self untuk mengetik TResult, memeriksa bahwa paksaan valid di sisi Java.

JavaCast<TResult>(IJavaObject)

Melakukan konversi jenis yang diperiksa runtime Android.

JavaCast<TResult>(IJavaObject)

Mewakili elemen anotasi dari program yang saat ini berjalan di VM ini.

TryJavaCast<TResult>(IJavaPeerable, TResult)

Cobalah untuk memaksa self untuk mengetik TResult, memeriksa bahwa paksaan valid di sisi Java.

Berlaku untuk