Share via


IMethodHandleInfo 接口

定义

通过将直接方法句柄破解到其常量符号部件中获得的符号引用。

[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
属性
实现

注解

通过将直接方法句柄破解到其常量符号部件中获得的符号引用。 若要破解直接方法句柄,请调用 Lookup#revealDirect Lookup.revealDirect。 <h1>“directmh”>Direct 方法句柄</h1> em>< 直接方法句柄</em> 表示没有任何干预参数绑定或其他转换的方法、构造函数或字段。 直接方法句柄引用的方法、构造函数或字段称为其 <em 基础 member</em>>。 可以通过以下任一ldc方式获取直接方法句柄:<ul<>li>通过对CONSTANT_MethodHandle常量执行指令。 (请参阅 Java 虚拟机规范第 4.4.8 节和 5.4.3.) <li>通过调用查找工厂方法之一(例如 Lookup#findVirtual Lookup.findVirtual)将符号引用解析为方法句柄。 符号引用由类、名称字符串和类型组成。 <li>通过调用工厂方法 Lookup#unreflect Lookup.unreflectLookup#unreflectSpecial Lookup.unreflectSpecial 将 转换为 Method 方法句柄。 <li>通过调用工厂方法 Lookup#unreflectConstructor Lookup.unreflectConstructor 将 转换为 Constructor 方法句柄。 <li>通过调用工厂方法 Lookup#unreflectGetter Lookup.unreflectGetterLookup#unreflectSetter Lookup.unreflectSetter 将 转换为 Field 方法句柄。 </ul>

<h1>对破解<的限制/h1> 给定一个合适的 Lookup 对象,可以破解任何直接方法句柄来恢复基础方法、构造函数或字段的符号引用。 破解必须通过 Lookup 与创建目标方法句柄的等效对象或具有足够访问权限以重新创建等效方法句柄的对象来完成。

如果基础方法对调用方敏感,则直接方法句柄将“绑定到”特定调用方类,即用于创建它的查找对象的 java.lang.invoke.MethodHandles.Lookup#lookupClass () 查找类。 即使基础方法是公共 ((如) ) Class.forName ,使用不同的查找类破解此方法句柄也会失败。

查找对象匹配的要求为程序提供了“快速失败”行为,这些程序可能会信任方法句柄的错误披露以及来自意外范围) 符号信息 (或调用方绑定。 使用 java.lang.invoke.MethodHandles#reflectAs 覆盖此限制。

<h1>“refkinds”>引用类型</h1> 查找工厂方法对应于方法、构造函数和字段的所有主要用例。 这些用例可以使用小整数进行区分,如下所示:<table border=1 cellpadding=5 summary=“reference kind”><tr><th>reference kind</th><th>描述性名称</th><th>scope</th><th>member</th><th th>behavior</th></tr<><>td<>1/td><td<REF_getField>/td td<class><>/td td/td<>tdFT f;<>/td td><>(T) this.f;</td></tr><td>2<<>/td td><td><REF_getStatic>class 或<><interface /td<>td<static>br<FT f;>/td td><td<>(T) C.f;/td></tr><<>td3></td/td><<>REF_putField td/td><td>class</td td/td<>td>FT f;</td><td/td><this.f = x;<>/tr><td><4/td><td><REF_putStatic/td><td>class< td>>static<<br<>FT f;/td td><td><C.f = arg;/td></tr><><td<5>/td><tdREF_invokeVirtual<>/td><td/td td><class/td><td><T m(A*);/td td/td td/td<><>(T) this.m(arg*);<>/tr<>><td>6</td><td>REF_invokeStatic</td><td>classinterface</td><td>static<br>T m(A*);</td><td>(T) C.m(arg*);</td></tr><td><7<>/td td>REF_invokeSpecial><</td><tdclass> 或<interface /td><td><T m(A*);/td td><(T) super.m(arg*);/td><<>><><tr><td>8</td><td>REF_newInvokeSpecial</td><td><class/td><td><C(A*);/td><td><new C(arg*);/td></tr><td><9<>/td td>REF_invokeInterface<></td><td>interface</td td/td<>tdT m(A*);></td td/td td/td><<>(T) this.m(arg*);></tr></table>

在 1.8 中添加。

java.lang.invoke.MethodHandleInfoJava 文档。

此页面的部分内容是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的术语使用。

属性

DeclaringClass

通过将直接方法句柄破解到其常量符号部件中获得的符号引用。

Handle

获取基础 Android 对象的 JNI 值。

(继承自 IJavaObject)
IsVarArgs

确定基础成员是变量 arity 方法还是构造函数。

JniIdentityHashCode

返回包装实例的 的值 java.lang.System.identityHashCode()

(继承自 IJavaPeerable)
JniManagedPeerState

托管对等方的状态。

(继承自 IJavaPeerable)
JniPeerMembers

成员访问和调用支持。

(继承自 IJavaPeerable)
MethodType

通过将直接方法句柄破解到其常量符号部件中获得的符号引用。

Modifiers

通过将直接方法句柄破解到其常量符号部件中获得的符号引用。

Name

通过将直接方法句柄破解到其常量符号部件中获得的符号引用。

PeerReference

返回 JniObjectReference 包装的 Java 对象实例的 。

(继承自 IJavaPeerable)
ReferenceKind

通过将直接方法句柄破解到其常量符号部件中获得的符号引用。

方法

Disposed()

释放实例时调用。

(继承自 IJavaPeerable)
DisposeUnlessReferenced()

如果没有对此实例的未完成引用,则调用 Dispose();否则,不执行任何操作。

(继承自 IJavaPeerable)
Finalized()

在实例完成时调用。

(继承自 IJavaPeerable)
ReferenceKindToString(ReferenceKind)

返回给定引用类型的描述性名称,如上表所定义。

RefKindIsField(ReferenceKind)

此成员已弃用。

RefKindIsValid(ReferenceKind)

此成员已弃用。

RefKindName(ReferenceKind)

此成员已弃用。

ReflectAs(Class, MethodHandles+Lookup)

将基础成员反映为方法、构造函数或字段对象。

SetJniIdentityHashCode(Int32)

设置 返回 JniIdentityHashCode的值。

(继承自 IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

通过将直接方法句柄破解到其常量符号部件中获得的符号引用。

(继承自 IJavaPeerable)
SetPeerReference(JniObjectReference)

设置 返回 PeerReference的值。

(继承自 IJavaPeerable)
ToString(ReferenceKind, Class, String, MethodType)

返回 的字符串表示形式 MethodHandleInfo,给定其符号引用的四个部分。

UnregisterFromRuntime()

取消注册此实例,以便运行时不会从将来 Java.Interop.JniRuntime+JniValueManager.PeekValue 的调用中返回它。

(继承自 IJavaPeerable)

扩展方法

JavaCast<TResult>(IJavaObject)

执行 Android 运行时检查的类型转换。

JavaCast<TResult>(IJavaObject)

通过将直接方法句柄破解到其常量符号部件中获得的符号引用。

GetJniTypeName(IJavaPeerable)

通过将直接方法句柄破解到其常量符号部件中获得的符号引用。

适用于