MutableCallSite 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
A MutableCallSite 是 CallSite 其目标变量的行为类似于普通字段。
[Android.Runtime.Register("java/lang/invoke/MutableCallSite", ApiSince=26, DoNotGenerateAcw=true)]
public class MutableCallSite : Java.Lang.Invoke.CallSite
[<Android.Runtime.Register("java/lang/invoke/MutableCallSite", ApiSince=26, DoNotGenerateAcw=true)>]
type MutableCallSite = class
inherit CallSite
- 继承
- 属性
注解
A MutableCallSite 是 CallSite 其目标变量的行为类似于普通字段。
invokedynamic链接到MutableCallSite委托对站点当前目标的所有调用的说明。 可变调用站点的 CallSite#dynamicInvoker 动态调用方还将每个调用委托给站点的当前目标。
下面是可变调用站点的示例,它将状态变量引入方法句柄链。 <-- JavaDocExamplesTest.testMutableCallSite --><blockquote>
{@code
MutableCallSite name = new MutableCallSite(MethodType.methodType(String.class));
MethodHandle MH_name = name.dynamicInvoker();
MethodType MT_str1 = MethodType.methodType(String.class);
MethodHandle MH_upcase = MethodHandles.lookup()
.findVirtual(String.class, "toUpperCase", MT_str1);
MethodHandle worker1 = MethodHandles.filterReturnValue(MH_name, MH_upcase);
name.setTarget(MethodHandles.constant(String.class, "Rocky"));
assertEquals("ROCKY", (String) worker1.invokeExact());
name.setTarget(MethodHandles.constant(String.class, "Fred"));
assertEquals("FRED", (String) worker1.invokeExact());
// (mutation can be continued indefinitely)
}
</blockquote>
同一呼叫站点可以同时在多个位置使用。 <blockquote>
{@code
MethodType MT_str2 = MethodType.methodType(String.class, String.class);
MethodHandle MH_cat = lookup().findVirtual(String.class,
"concat", methodType(String.class, String.class));
MethodHandle MH_dear = MethodHandles.insertArguments(MH_cat, 1, ", dear?");
MethodHandle worker2 = MethodHandles.filterReturnValue(MH_name, MH_dear);
assertEquals("Fred, dear?", (String) worker2.invokeExact());
name.setTarget(MethodHandles.constant(String.class, "Wilma"));
assertEquals("WILMA", (String) worker1.invokeExact());
assertEquals("Wilma, dear?", (String) worker2.invokeExact());
}
</blockquote>
<em>目标值的非同步:</em> 写入可变调用站点的目标不会强制其他线程意识到更新的值。 与更新调用站点相关的不执行适当同步操作的线程可能会缓存旧目标值,并无限期延迟其使用新目标值。 (这是应用于对象字段的Java内存模型的正常后果。
对于经常更新的目标值,请考虑改用 VolatileCallSite 易失调用站点。
Java文档java.lang.invoke.MutableCallSite。
本页的某些部分是根据 创建和共享的工作进行的修改,并根据 许可证中所述的条款使用。
构造函数
| 名称 | 说明 |
|---|---|
| MutableCallSite(IntPtr, JniHandleOwnership) |
A |
| MutableCallSite(MethodHandle) |
使用初始目标方法句柄创建调用站点对象。 |
| MutableCallSite(MethodType) |
创建具有给定方法类型的空白调用网站对象。 |
属性
| 名称 | 说明 |
|---|---|
| Class |
返回此 |
| Handle |
基础 Android 实例的句柄。 (继承自 Object) |
| JniIdentityHashCode |
A |
| JniPeerMembers |
A |
| PeerReference |
A |
| Target |
返回调用站点的目标方法,其行为类似于正常 |
| ThresholdClass |
A |
| ThresholdType |
A |
方法
| 名称 | 说明 |
|---|---|
| Clone() |
创建并返回此对象的副本。 (继承自 Object) |
| Dispose() |
A |
| Dispose(Boolean) |
A |
| DynamicInvoker() |
要添加 |
| Equals(Object) |
指示其他对象是否“等于”此对象。 (继承自 Object) |
| GetHashCode() |
返回对象的哈希代码值。 (继承自 Object) |
| JavaFinalize() |
当垃圾回收确定不再引用该对象时,由对象上的垃圾回收器调用。 (继承自 Object) |
| Notify() |
唤醒正在等待此对象的监视器的单个线程。 (继承自 Object) |
| NotifyAll() |
唤醒正在等待此对象的监视器的所有线程。 (继承自 Object) |
| SetHandle(IntPtr, JniHandleOwnership) |
设置 Handle 属性。 (继承自 Object) |
| ToArray<T>() |
A |
| ToString() |
返回对象的字符串表示形式。 (继承自 Object) |
| Type() |
返回此调用站点的目标的类型。 (继承自 CallSite) |
| UnregisterFromRuntime() |
A |
| Wait() |
使当前线程等待,直到唤醒它,通常是通过 em 通知/em< 或 >em<interrupted>/em<。><> (继承自 Object) |
| Wait(Int64, Int32) |
使当前线程等待直到唤醒,通常是通过 <em>通知</em> 或 <em interrupted>/em<>,或直到经过一定数量的实时。 (继承自 Object) |
| Wait(Int64) |
使当前线程等待直到唤醒,通常是通过 <em>通知</em> 或 <em interrupted>/em<>,或直到经过一定数量的实时。 (继承自 Object) |
显式接口实现
| 名称 | 说明 |
|---|---|
| IJavaPeerable.Disposed() |
A |
| IJavaPeerable.DisposeUnlessReferenced() |
A |
| IJavaPeerable.Finalized() |
A |
| IJavaPeerable.JniManagedPeerState |
A |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
A |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
A |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
A |
扩展方法
| 名称 | 说明 |
|---|---|
| GetJniTypeName(IJavaPeerable) |
获取实例 |
| JavaAs<TResult>(IJavaPeerable) |
尝试强制 |
| JavaCast<TResult>(IJavaObject) |
执行 Android 运行时检查的类型转换。 |
| JavaCast<TResult>(IJavaObject) |
A |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
尝试强制 |