CallSite 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
是 CallSite
变量的持有者,该变量 MethodHandle
称为其 target
。
[Android.Runtime.Register("java/lang/invoke/CallSite", ApiSince=26, DoNotGenerateAcw=true)]
public abstract class CallSite : Java.Lang.Object
[<Android.Runtime.Register("java/lang/invoke/CallSite", ApiSince=26, DoNotGenerateAcw=true)>]
type CallSite = class
inherit Object
- 继承
- 派生
- 属性
注解
是 CallSite
变量的持有者,该变量 MethodHandle
称为其 target
。 invokedynamic
链接到的CallSite
指令委托对站点当前目标的所有调用。 CallSite
可以与多个invokedynamic
指令关联,也可以是“自由浮动”,与无关联。 在任何情况下,都可以通过名为其 #dynamicInvoker 动态调用程序的相关方法句柄调用它。
CallSite
是一个抽象类,不允许用户直接进行子类。 它有三个直接的具体子类,这些子类可以实例化或子类。 <ul><li>如果不需要可变目标, invokedynamic
可以通过 ConstantCallSite 常量调用站点永久绑定指令。 <li>如果需要具有可变变量语义的可变目标,因为其他线程必须立即可靠地见证对目标的更新,因此可以使用 VolatileCallSite 易失性调用站点。 <>否则,如果需要可变目标,可以使用 MutableCallSite 可变调用站点。 </ul>
非常量调用站点可能<>通过更改其目标来重新链接</em>。 新目标必须与上一个目标具有相同的 MethodHandle#type () 类型。 因此,尽管呼叫站点可以重新链接到一系列连续的目标,但它无法更改其类型。
下面是调用站点和引导方法的示例用法,这些方法链接每个动态调用站点以打印其参数: <blockquote>
{@code
static void test() throws Throwable {
// THE FOLLOWING LINE IS PSEUDOCODE FOR A JVM INSTRUCTION
InvokeDynamic[#bootstrapDynamic].baz("baz arg", 2, 3.14);
}
private static void printArgs(Object... args) {
System.out.println(java.util.Arrays.deepToString(args));
}
private static final MethodHandle printArgs;
static {
MethodHandles.Lookup lookup = MethodHandles.lookup();
Class thisClass = lookup.lookupClass(); // (who am I?)
printArgs = lookup.findStatic(thisClass,
"printArgs", MethodType.methodType(void.class, Object[].class));
}
private static CallSite bootstrapDynamic(MethodHandles.Lookup caller, String name, MethodType type) {
// ignore caller and name, but match the type:
return new ConstantCallSite(printArgs.asType(type));
}
}
</blockquote>
的 java.lang.invoke.CallSite
Java 文档。
此页面的部分内容是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的术语使用。
构造函数
CallSite(IntPtr, JniHandleOwnership) |
是 |
属性
Class |
返回此 |
Handle |
基础 Android 实例的句柄。 (继承自 Object) |
JniIdentityHashCode |
是 |
JniPeerMembers |
是 |
PeerReference |
是 |
Target |
是 |
ThresholdClass |
是 |
ThresholdType |
是 |
方法
Clone() |
创建并返回此对象的副本。 (继承自 Object) |
Dispose() |
是 |
Dispose(Boolean) |
是 |
DynamicInvoker() |
生成与已链接到此调用站点的 invokedynamic 指令等效的方法句柄。 |
Equals(Object) |
指示其他某个对象是否“等于”此对象。 (继承自 Object) |
GetHashCode() |
返回对象的哈希代码值。 (继承自 Object) |
JavaFinalize() |
当垃圾回收确定不再引用对象时,由对象上的垃圾回收器调用。 (继承自 Object) |
Notify() |
唤醒正在等待此对象的监视器的单个线程。 (继承自 Object) |
NotifyAll() |
唤醒正在等待此对象的监视器的所有线程。 (继承自 Object) |
SetHandle(IntPtr, JniHandleOwnership) |
设置 Handle 属性。 (继承自 Object) |
ToArray<T>() |
是 |
ToString() |
返回对象的字符串表示形式。 (继承自 Object) |
Type() |
返回此调用站点的目标的类型。 |
UnregisterFromRuntime() |
是 |
Wait() |
导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>。<> (继承自 Object) |
Wait(Int64) |
导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>,或直到经过一定数量的实时。<> (继承自 Object) |
Wait(Int64, Int32) |
导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>,或直到经过一定数量的实时。<> (继承自 Object) |
显式接口实现
IJavaPeerable.Disposed() |
是 |
IJavaPeerable.DisposeUnlessReferenced() |
是 |
IJavaPeerable.Finalized() |
是 |
IJavaPeerable.JniManagedPeerState |
是 |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
是 |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
是 |
IJavaPeerable.SetPeerReference(JniObjectReference) |
是 |
扩展方法
JavaCast<TResult>(IJavaObject) |
执行 Android 运行时检查的类型转换。 |
JavaCast<TResult>(IJavaObject) |
是 |
GetJniTypeName(IJavaPeerable) |
是 |