IAnnotatedElement Schnittstelle

Definition

Stellt ein kommentiertes Element des Programms dar, das derzeit auf dieser VM ausgeführt wird.

[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
Abgeleitet
Attribute
Implementiert

Hinweise

Stellt ein kommentiertes Element des Programms dar, das derzeit auf dieser VM ausgeführt wird. Diese Schnittstelle ermöglicht es, Anmerkungen reflektierend zu lesen. Alle Anmerkungen, die von Methoden in dieser Schnittstelle zurückgegeben werden, sind unveränderlich und serialisierbar. Die von Methoden dieser Schnittstelle zurückgegebenen Arrays können von Aufrufern geändert werden, ohne dass sich die Arrays auswirken, die an andere Aufrufer zurückgegeben werden.

Android-Hinweis: Methoden, die mehrere Anmerkungen verschiedener Typen zurückgeben, z #getAnnotations() . B. und #getDeclaredAnnotations() können von der expliziten Zeichencode-Sortierung von Anmerkungstypen beeinflusst werden, die im DEX-Format angegeben sind. Anmerkungen verschiedener Typen für ein einzelnes Element werden nicht garantiert in der Reihenfolge zurückgegeben, in der sie in der Quelle deklariert werden.

Die #getAnnotationsByType(Class) Methoden #getDeclaredAnnotationsByType(Class) unterstützen mehrere Anmerkungen desselben Typs für ein Element. Wenn es sich bei dem Argument für eine der Methoden um einen wiederholbaren Anmerkungstyp (JLS 9.6) handelt, sucht die Methode eine Containeranmerkung (JLS 9.7), falls vorhanden, und geben Alle Anmerkungen innerhalb des Containers zurück. Containeranmerkungen können zur Kompilierungszeit generiert werden, um mehrere Anmerkungen des Argumenttyps umzuschließen.

Die Begriffe <em>direkt vorhanden</em, <em>indirekt vorhanden</em>>, <em>present</em> und <em>associated</em> werden in dieser Schnittstelle verwendet, um genau zu beschreiben, welche Anmerkungen von Methoden zurückgegeben werden:

<Ul>

<li> Eine Anmerkung A ist <em>direkt vorhanden</em> auf einem Element E , wenn E in der ursprünglichen Quelle von A kommentiert wird.

<li>Eine Anmerkung A ist <indirekt>vorhanden</em> für ein Element E , wenn E durch eine Containeranmerkung von A kommentiert wird.

<li>Eine Anmerkung A ist in einem Element E vorhanden, wenn eine der folgenden Optionen gilt:

<Ul>

<li>A ist direkt auf E vorhanden oder

<li>Keine Anmerkung des Typs A 's ist direkt auf E vorhanden, und E ist eine Klasse, und A 's Typ ist vererbbar, und A ist in der Superklasse von E vorhanden.

</ul>

<li>Eine Anmerkung A ist <em>zugeordnet</em> mit einem Element E , wenn einer der folgenden Elemente:

<Ul>

<li>A ist direkt oder indirekt auf E vorhanden; oder

<li>Keine Anmerkung des Typs "A " ist direkt oder indirekt auf E vorhanden, und E ist eine Klasse, und der Typ A ist vererbbar, und A ist der Superklasse von E zugeordnet.

</ul>

</ul>

In der folgenden Tabelle wird zusammengefasst, welche Art von Anmerkung unterschiedlichen Methoden in dieser Schnittstelle untersucht wird.

<table class="plain">caption Overview of kind of presence detected by different AnnotatedElement methods</caption<>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<>th scope="col">Signature</th th><scope="col">Directly Present</th><scope="col">><Indirekt präsentieren</th<>bereich="col">Present</th th><scope="col"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 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><>< 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><><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><<>/tr tr><td><style="text-align:right"Annotation[]<>/td><th scope="row" style=" Schriftbreite:normal; text-align:left"><#getDeclaredAnnotations getDeclaredAnnotations()td style="text-align:center">X</td td><></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><td></td></tr></tbody></table>

Bei einem Aufruf von get[Declared]AnnotationsByType( Class < T >), wird die Reihenfolge der Anmerkungen, die direkt oder indirekt auf einem Element E vorhanden sind, berechnet, als ob indirekt anmerkungen auf E anstelle ihrer Containeranmerkung direkt vorhanden sind, in der Reihenfolge, in der sie im Wertelement der Containeranmerkung angezeigt werden.

Es gibt mehrere Kompatibilitätsprobleme, die Sie berücksichtigen sollten, wenn ein Anmerkungstyp T ursprünglich <>nicht</em> nicht wiederholbar ist und später geändert werden kann, um wiederholbar zu sein.

Der enthaltende Anmerkungstyp für T ist TC.

<Ul>

<li Das>Ändern von T als wiederholbar ist quelle und binär kompatibel mit vorhandenen Verwendungen von T und mit vorhandenen Verwendungen von TC.

Aus Gründen der Quellkompatibilität werden Quellcode mit Anmerkungen vom Typ T oder vom Typ TC weiterhin kompiliert. Für binäre Kompatibilität verknüpfen Klassendateien mit Anmerkungen vom Typ T oder typ TC (oder mit anderen Arten von Verwendungen vom Typ T oder vom Typ TC) mit der geänderten Version von T , wenn sie mit der früheren Version verknüpft sind.

(Ein Anmerkungstyp TC kann informell als handelnder Anmerkungstyp dienen, bevor T geändert wird, damit er formell wiederholbar ist. Wenn T wiederholbar gemacht wird, kann TC auch als neuer Typ eingeführt werden.)

<li>Wenn ein Anmerkungstyp TC für ein Element vorhanden ist und T so geändert wird, dass er mit TC als enthaltenden Anmerkungstyp wiederholbar ist, dann:

<Ul>

<li>Die Änderung an T ist verhaltenskompatibel in Bezug auf die get[Declared]Annotation(Class<T>) (mit einem Argument von T oder TC bezeichnet) und get[Declared]Annotations() Methoden, da sich die Ergebnisse der Methoden aufgrund des Tc-Werdens des enthaltenden Anmerkungstyps für T nicht ändern.

<li>Die Änderung an T ändert die Ergebnisse der Methoden, die get[Declared]AnnotationsByType(Class<T>) mit einem Argument von T aufgerufen werden, da diese Methoden jetzt eine Anmerkung des Typs TC als Containeranmerkung für T erkennen und "durchsehen" werden, um Anmerkungen vom Typ T verfügbar zu machen.

</ul>

<li>Wenn eine Anmerkung vom Typ T auf einem Element vorhanden ist und T wiederholbar gemacht wird und weitere Anmerkungen vom Typ T dem Element hinzugefügt werden:

<Ul>

<li> Das Hinzufügen der Anmerkungen vom Typ T ist sowohl quellkompatibel als auch binärkompatibel.

<li>Das Hinzufügen der Anmerkungen vom Typ T ändert die Ergebnisse der get[Declared]Annotation(Class<T>) Methoden und get[Declared]Annotations() Methoden, da diese Methoden jetzt nur eine Containeranmerkung für das Element sehen und keine Anmerkung vom Typ T sehen.

<li>Das Hinzufügen der Anmerkungen vom Typ T ändert die Ergebnisse der get[Declared]AnnotationsByType(Class<T>) Methoden, da ihre Ergebnisse die zusätzlichen Anmerkungen vom Typ T verfügbar machen, während sie zuvor nur eine einzelne Anmerkung vom Typ T verfügbar gemacht haben.

</ul>

</ul>

Wenn eine von einer Methode in dieser Schnittstelle zurückgegebene Anmerkung (direkt oder indirekt) ein Class-wertiges Element enthält, das auf eine Klasse verweist, auf die in dieser VM nicht zugegriffen werden kann, führt der Versuch, die Klasse durch Aufrufen der relevanten Klasse-Rückgabemethode für die zurückgegebene Anmerkung zu lesen, zu einer TypeNotPresentException.

Ebenso führt der Versuch, ein Enumerationselement zu lesen, eine EnumConstantNotPresentException , wenn die Enumerationskonstante in der Anmerkung nicht mehr im Enumerationstyp vorhanden ist.

Wenn ein Anmerkungstyp T (meta-)mit einer @Repeatable Anmerkung kommentiert wird, deren Wertelement einen Typ TC angibt, aber TC keine Methode mit einem Rückgabetyp von T[] deklariertvalue(), wird eine Ausnahme des Typs java.lang.annotation.AnnotationFormatError ausgelöst.

Schließlich führt der Versuch, ein Element zu lesen, dessen Definition sich inkompatibel entwickelt hat, zu einem java.lang.annotation.AnnotationTypeMismatchException oder einem java.lang.annotation.IncompleteAnnotationException.

Hinzugefügt in 1.5.

Java Dokumentation für java.lang.reflect.AnnotatedElement.

Teile dieser Seite sind Änderungen auf der Grundlage von Arbeiten, die von der Android Open Source Project erstellt und gemeinsam verwendet und gemäß den in der 2.5 Attribution License beschriebenen Begriffen verwendet werden.

Eigenschaften

Name Beschreibung
Handle

Ruft den JNI-Wert des zugrunde liegenden Android-Objekts ab.

(Geerbt von IJavaObject)
JniIdentityHashCode

Gibt den Wert java.lang.System.identityHashCode() für die umbrochene Instanz zurück.

(Geerbt von IJavaPeerable)
JniManagedPeerState

Status des verwalteten Peers.

(Geerbt von IJavaPeerable)
JniPeerMembers

Mitgliedszugriff und Aufrufunterstützung.

(Geerbt von IJavaPeerable)
PeerReference

Gibt eine JniObjectReference der umbrochenen Java Objektinstanz zurück.

(Geerbt von IJavaPeerable)

Methoden

Name Beschreibung
Disposed()

Wird aufgerufen, wenn die Instanz verworfen wurde.

(Geerbt von IJavaPeerable)
DisposeUnlessReferenced()

Wenn keine offenen Verweise auf diese Instanz vorhanden sind, wird nichts aufgerufen Dispose(). Andernfalls wird nichts ausgeführt.

(Geerbt von IJavaPeerable)
Finalized()

Wird aufgerufen, wenn die Instanz abgeschlossen wurde.

(Geerbt von IJavaPeerable)
GetAnnotation(Class)

Gibt die Anmerkung dieses Elements für den angegebenen Typ zurück, wenn eine solche Anmerkung em present<>/em> ist<, sonst NULL.

GetAnnotations()

Gibt Anmerkungen zurück, die für dieses Element vorhanden></em> sind<.

GetAnnotationsByType(Class)

Gibt Anmerkungen zurück, die diesem>Element zugeordnet/em> zugeordnet< sind<.

GetDeclaredAnnotation(Class)

Gibt die Anmerkung dieses Elements für den angegebenen Typ zurück, wenn eine solche Anmerkung direkt vorhanden</em> ist<>, sonst NULL.

GetDeclaredAnnotations()

Gibt Anmerkungen zurück, die für>dieses Element direkt vorhanden</em> sind<.

GetDeclaredAnnotationsByType(Class)

Gibt die Anmerkungen dieses Elements für den angegebenen Typ zurück, wenn solche Anmerkungen entweder <>direkt vorhanden</em oder <indirekt>vorhanden</em>> sind.

IsAnnotationPresent(Class)

Gibt true zurück, wenn eine Anmerkung für den angegebenen Typ em>present/em> für dieses Element ist<, andernfalls< "false".

SetJniIdentityHashCode(Int32)

Legen Sie den von JniIdentityHashCode.

(Geerbt von IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

Stellt ein kommentiertes Element des Programms dar, das derzeit auf dieser VM ausgeführt wird.

(Geerbt von IJavaPeerable)
SetPeerReference(JniObjectReference)

Legen Sie den von PeerReference.

(Geerbt von IJavaPeerable)
UnregisterFromRuntime()

Heben Sie die Registrierung dieser Instanz auf, damit die Laufzeit sie nicht aus zukünftigen Java.Interop.JniRuntime+JniValueManager.PeekValue Aufrufen zurückgibt.

(Geerbt von IJavaPeerable)

Erweiterungsmethoden

Name Beschreibung
GetJniTypeName(IJavaPeerable)

Ruft den JNI-Namen des Typs der Instanz selfab.

JavaAs<TResult>(IJavaPeerable)

Versuchen Sie, die Eingabe selfzu TResult erzwingen, und überprüfen Sie, ob die Koersion auf der Java Seite gültig ist.

JavaCast<TResult>(IJavaObject)

Führt eine android-laufzeitgecheckte Typkonvertierung aus.

JavaCast<TResult>(IJavaObject)

Stellt ein kommentiertes Element des Programms dar, das derzeit auf dieser VM ausgeführt wird.

TryJavaCast<TResult>(IJavaPeerable, TResult)

Versuchen Sie, die Eingabe selfzu TResult erzwingen, und überprüfen Sie, ob die Koersion auf der Java Seite gültig ist.

Gilt für: