IMethodHandleInfo 接口
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
通过将直接方法句柄破解到其常量符号部件中获得的符号引用。
[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.unreflect
或 Lookup#unreflectSpecial Lookup.unreflectSpecial
将 转换为 Method
方法句柄。 <li>通过调用工厂方法 Lookup#unreflectConstructor Lookup.unreflectConstructor
将 转换为 Constructor
方法句柄。 <li>通过调用工厂方法 Lookup#unreflectGetter Lookup.unreflectGetter
或 Lookup#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>class
或 interface
</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.MethodHandleInfo
Java 文档。
此页面的部分内容是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的术语使用。
属性
DeclaringClass |
通过将直接方法句柄破解到其常量符号部件中获得的符号引用。 |
Handle |
获取基础 Android 对象的 JNI 值。 (继承自 IJavaObject) |
IsVarArgs |
确定基础成员是变量 arity 方法还是构造函数。 |
JniIdentityHashCode |
返回包装实例的 的值 |
JniManagedPeerState |
托管对等方的状态。 (继承自 IJavaPeerable) |
JniPeerMembers |
成员访问和调用支持。 (继承自 IJavaPeerable) |
MethodType |
通过将直接方法句柄破解到其常量符号部件中获得的符号引用。 |
Modifiers |
通过将直接方法句柄破解到其常量符号部件中获得的符号引用。 |
Name |
通过将直接方法句柄破解到其常量符号部件中获得的符号引用。 |
PeerReference |
返回 JniObjectReference 包装的 Java 对象实例的 。 (继承自 IJavaPeerable) |
ReferenceKind |
通过将直接方法句柄破解到其常量符号部件中获得的符号引用。 |
方法
Disposed() |
释放实例时调用。 (继承自 IJavaPeerable) |
DisposeUnlessReferenced() |
如果没有对此实例的未完成引用,则调用 |
Finalized() |
在实例完成时调用。 (继承自 IJavaPeerable) |
ReferenceKindToString(ReferenceKind) |
返回给定引用类型的描述性名称,如上表所定义。 |
RefKindIsField(ReferenceKind) |
此成员已弃用。 |
RefKindIsValid(ReferenceKind) |
此成员已弃用。 |
RefKindName(ReferenceKind) |
此成员已弃用。 |
ReflectAs(Class, MethodHandles+Lookup) |
将基础成员反映为方法、构造函数或字段对象。 |
SetJniIdentityHashCode(Int32) |
设置 返回 |
SetJniManagedPeerState(JniManagedPeerStates) |
通过将直接方法句柄破解到其常量符号部件中获得的符号引用。 (继承自 IJavaPeerable) |
SetPeerReference(JniObjectReference) |
设置 返回 |
ToString(ReferenceKind, Class, String, MethodType) |
返回 的字符串表示形式 |
UnregisterFromRuntime() |
取消注册此实例,以便运行时不会从将来 Java.Interop.JniRuntime+JniValueManager.PeekValue 的调用中返回它。 (继承自 IJavaPeerable) |
扩展方法
JavaCast<TResult>(IJavaObject) |
执行 Android 运行时检查的类型转换。 |
JavaCast<TResult>(IJavaObject) |
通过将直接方法句柄破解到其常量符号部件中获得的符号引用。 |
GetJniTypeName(IJavaPeerable) |
通过将直接方法句柄破解到其常量符号部件中获得的符号引用。 |