IMethodHandleInfo Schnittstelle

Definition

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 java.lang.System.identityHashCode() für die umbrochene Instanz zurück.

(Geerbt von IJavaPeerable)
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 Dispose(). Andernfalls wird nichts ausgeführt.

(Geerbt von IJavaPeerable)
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 JniIdentityHashCode.

(Geerbt von IJavaPeerable)
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 PeerReference.

(Geerbt von IJavaPeerable)
ToString(ReferenceKind, Class, String, MethodType)

Gibt eine Zeichenfolgendarstellung für ein MethodHandleInfo, wobei die vier Teile des symbolischen Bezugs angegeben sind.

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)

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 selfzu TResult erzwingen, und überprüfen Sie, ob die Koersion auf der Java Seite gültig ist.

Gilt für: