IMethodHandleInfo Schnittstelle
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Ein symbolischer Bezug, der durch Das Knacken eines direkten Methodenhandles in seine konsequenten symbolischen Teile gewonnen wird.
[Android.Runtime.Register("java/lang/invoke/MethodHandleInfo", "", "Java.Lang.Invoke.IMethodHandleInfoInvoker", ApiSince=26)]
public interface IMethodHandleInfo : Android.Runtime.IJavaObject, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("java/lang/invoke/MethodHandleInfo", "", "Java.Lang.Invoke.IMethodHandleInfoInvoker", ApiSince=26)>]
type IMethodHandleInfo = interface
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- Attribute
- Implementiert
Hinweise
Ein symbolischer Bezug, der durch Das Knacken eines direkten Methodenhandles in seine konsequenten symbolischen Teile gewonnen wird. Rufen Sie auf Lookup#revealDirect Lookup.revealDirect, um ein direktes Methodenhandle zu knacken.
<h1>"directmh">Direct Method Handles/h1< A >em<direct method handle></em> represents a method, constructor, or field without any intervening argument bindings or other transformations. Die Methode, der Konstruktor oder das Feld, auf die durch ein direktes Methodenhandle verwiesen wird, wird als <em zugrunde liegendes>Element</Em> bezeichnet. Direkte Methodenhandles können auf eine der folgenden Arten abgerufen werden: <ul><li>Durch Ausführen einer ldc Anweisung für eine CONSTANT_MethodHandle Konstante. (Siehe Java Spezifikation des virtuellen Computers, Abschnitte 4.4.8 und 5.4.3.) <li>Durch Aufrufen einer der Lookup Factory-Methoden, zLookup#findVirtual Lookup.findVirtual. B. zum Auflösen eines symbolischen Verweises in einen Methodenhandle. Ein symbolischer Verweis besteht aus einer Klasse, einer Namenszeichenfolge und einem Typ.
<li>Durch Aufrufen der Factorymethode Lookup#unreflect Lookup.unreflect oder Lookup#unreflectSpecial Lookup.unreflectSpecial Konvertieren eines Method in ein Methodenhandle.
<li>Durch Aufrufen der Factorymethode Lookup#unreflectConstructor Lookup.unreflectConstructor zum Konvertieren eines Constructor in ein Methodenhandle.
<li>Durch Aufrufen der Factorymethode Lookup#unreflectGetter Lookup.unreflectGetter oder Lookup#unreflectSetter Lookup.unreflectSetter Konvertieren eines Field in ein Methodenhandle.
</ul>
<h1>Einschränkungen für Cracking</h1> Aufgrund eines geeigneten Lookup Objekts ist es möglich, jedes direkte Methodenhandle zu knacken, um einen symbolischen Bezug für die zugrunde liegende Methode, den Konstruktor oder das Feld wiederherzustellen. Das Knacken muss über ein Lookup Objekt erfolgen, das dem Objekt entspricht, das das Zielmethodenhandle erstellt hat oder über genügend Zugriffsberechtigungen verfügt, um ein entsprechendes Methodenhandle neu zu erstellen.
Wenn die zugrunde liegende Methode als Aufrufer vertraulich ist, wurde der direkte Methodenhandle an eine bestimmte Aufruferklasse gebunden, die java.lang.invoke.MethodHandles.Lookup#lookupClass()-Nachschlageklasse des zum Erstellen verwendeten Nachschlageobjekts. Das Knacken dieses Methodenhandlings mit einer anderen Nachschlageklasse schlägt fehl, auch wenn die zugrunde liegende Methode öffentlich ist (z. B Class.forName. ).
Die Anforderung des Nachschlageobjektabgleichs bietet ein "schnelles Fail"-Verhalten für Programme, die andernfalls einer fehlerhaften Offenbarung eines Methodenhandles mit symbolischen Informationen (oder Aufruferbindung) aus einem unerwarteten Bereich vertrauen können. Wird verwendet java.lang.invoke.MethodHandles#reflectAs , um diese Einschränkung außer Kraft zu setzen.
<h1>"refkinds">Reference kinds</h1> The Lookup Factory Methods correspond to all major use cases for methods, constructors, and fields. Diese Anwendungsfälle können mithilfe kleiner ganzer Zahlen wie folgt unterschieden werden: <Tabellenrahmen=1 cellpadding=5 summary="reference kinds"><tr><th>reference kind</><th>beschreibender Name</th th><>bereich</th th><>member</th th th><>behavior</th></tr><tr><td>1</td><>REF_getField</td><td>class</td td/td td><>/td td td/tdFT f;<td><>(T) this.f;</td></tr><><td>2</td><td>REF_getStatic</td><td td>class oder interface</td><td>static<br>FT f;</td td></td/td>(T) C.f;<></tr><><td>3</td><>REF_putField<><>class<><>FT f;<>< td/td td/td td/td/td>this.f = x;<></tr tr><td><>/td4td<><>/tdREF_putStatictd<><>/tdclass<><>td brstatic<>/td tdFT f;<><>/tdC.f = arg;</tr><><td/td td><>/td5<><> td/REF_invokeVirtual<><>td td/class<><>T m(A*);td td/td td<><>/td/td(T) this.m(arg*);</tr><><td><>/td6td<><> tdREF_invokeStatic<>< oder >class/tdinterface<td><>brstatic<>/td td tdT m(A*);/td<><>(T) C.m(arg*);</tr><td></td td><>/td7<><>REF_invokeSpecial<>< oder>class /interface<td td><>/td td/T m(A*);<><>td/td/td(T) super.m(arg*);</tr ><><tr><td>8</td><>REF_newInvokeSpecial< td/><td>class< td/><td td>C(A*);</td td></td>new C(arg*);<></tr><><td/td td>9</td><>REF_invokeInterface< td><>interface/<td td/><>T m(A*);<><td td/td td>(T) this.m(arg*);</td></tr></table>
Hinzugefügt in 1.8.
Java Dokumentation für java.lang.invoke.MethodHandleInfo.
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 |
|---|---|
| DeclaringClass |
Gibt die Klasse zurück, in der das zugrunde liegende Element des zerbrochenen Methodenhandle definiert wurde. |
| Handle |
Ruft den JNI-Wert des zugrunde liegenden Android-Objekts ab. (Geerbt von IJavaObject) |
| IsVarArgs |
Bestimmt, ob das zugrunde liegende Element eine Variable arity-Methode oder ein Konstruktor war. |
| JniIdentityHashCode |
Gibt den Wert |
| JniManagedPeerState |
Status des verwalteten Peers. (Geerbt von IJavaPeerable) |
| JniObjectReferenceControlBlock |
Ein symbolischer Bezug, der durch Das Knacken eines direkten Methodenhandles in seine konsequenten symbolischen Teile gewonnen wird. (Geerbt von IJavaPeerable) |
| JniPeerMembers |
Mitgliedszugriff und Aufrufunterstützung. (Geerbt von IJavaPeerable) |
| MethodType |
Gibt den Nominaltyp des zerbrochenen symbolischen Bezugs zurück, ausgedrückt als Methodentyp. |
| Modifiers |
Gibt die Zugriffsmodifizierer des zugrunde liegenden Elements zurück. |
| Name |
Gibt den Namen des zugrunde liegenden Elements des zugrundeliegenden Members der rissigen Methode zurück. |
| PeerReference |
Gibt eine JniObjectReference der umbrochenen Java Objektinstanz zurück. (Geerbt von IJavaPeerable) |
| ReferenceKind |
Gibt den Verweistyp des gespaltenen Methodenhandle zurück, der wiederum bestimmt, ob das zugrunde liegende Element des Methodenhandle ein Konstruktor, eine Methode oder ein Feld war. |
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 |
| Finalized() |
Wird aufgerufen, wenn die Instanz abgeschlossen wurde. (Geerbt von IJavaPeerable) |
| ReferenceKindToString(ReferenceKind) |
Gibt den beschreibenden Namen der angegebenen Bezugsart zurück, wie in der obigen Tabelle definiert. |
| RefKindIsField(ReferenceKind) |
Dieses Element ist veraltet. |
| RefKindIsValid(ReferenceKind) |
Dieses Element ist veraltet. |
| RefKindName(ReferenceKind) |
Dieses Element ist veraltet. |
| ReflectAs(Class, MethodHandles+Lookup) |
Gibt das zugrunde liegende Element als Methode, Konstruktor oder Feldobjekt an. |
| SetJniIdentityHashCode(Int32) |
Legen Sie den von |
| SetJniManagedPeerState(JniManagedPeerStates) |
Ein symbolischer Bezug, der durch Das Knacken eines direkten Methodenhandles in seine konsequenten symbolischen Teile gewonnen wird. (Geerbt von IJavaPeerable) |
| SetPeerReference(JniObjectReference) |
Legen Sie den von |
| ToString(ReferenceKind, Class, String, MethodType) |
Gibt eine Zeichenfolgendarstellung für ein |
| 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 |
| JavaAs<TResult>(IJavaPeerable) |
Versuchen Sie, die Eingabe |
| JavaCast<TResult>(IJavaObject) |
Führt eine android-laufzeitgecheckte Typkonvertierung aus. |
| JavaCast<TResult>(IJavaObject) |
Ein symbolischer Bezug, der durch Das Knacken eines direkten Methodenhandles in seine konsequenten symbolischen Teile gewonnen wird. |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Versuchen Sie, die Eingabe |