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 volatile 呼叫網站。 <否則 > ,如果需要可變動的目標,可以使用 MutableCallSite 可變動呼叫網站。 </ul>
藉由變更其目標,非常數呼叫網站可能會 < 是 em > relinked < /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 檔。
此頁面的部分是根據所建立和共用的工作進行修改,並根據 2.5 屬性授權中所述的詞彙來使用。
建構函式
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 < notified/em > 或 < em > interrupted < /em > 。 >< (繼承來源 Object) |
Wait(Int64) |
讓目前的執行緒等到喚醒為止,通常是 em < notified/em > 或 < em > interrupted < /em > ,或直到經過一定數量的即時為止。 <> (繼承來源 Object) |
Wait(Int64, Int32) |
讓目前的執行緒等到喚醒為止,通常是 em < notified/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) |
|