CallSite Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Ein CallSite
ist ein Halter für eine Variable MethodHandle
, die als ihre target
bezeichnet wird.
[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
- Vererbung
- Abgeleitet
- Attribute
Hinweise
Ein CallSite
ist ein Halter für eine Variable MethodHandle
, die als ihre target
bezeichnet wird. Eine invokedynamic
Anweisung, die mit einer CallSite
verknüpft ist, delegiert alle Aufrufe an das aktuelle Ziel der Website. Ein CallSite
kann mehreren invokedynamic
Anweisungen zugeordnet sein, oder es kann "frei schwebend" sein und keinem zugeordnet sein. In jedem Fall kann es über ein zugeordnetes Methodenhandle aufgerufen werden, das als #dynamicInvoker dynamischer Aufrufer bezeichnet wird.
CallSite
ist eine abstrakte Klasse, die keine direkte Unterklasse durch Benutzer zulässt. Sie verfügt über drei direkte, konkrete Unterklassen, die entweder instanziiert oder unterklassiert werden können. <ul><li>Wenn kein veränderliches Ziel erforderlich ist, kann eine invokedynamic
Anweisung über eine ConstantCallSite-Konstantenaufrufwebsite dauerhaft gebunden werden. <li>Wenn ein veränderliches Ziel erforderlich ist, das über eine volatile Variablensemantik verfügt, da Updates des Ziels sofort und zuverlässig von anderen Threads beobachtet werden müssen, kann eine VolatileCallSite-Website für flüchtige Aufrufe verwendet werden. <li Andernfalls>kann, wenn ein veränderliches Ziel erforderlich ist, eine MutableCallSite-Aufrufwebsite verwendet werden. </ul>
Eine nicht konstante Aufrufwebsite kann durch Ändern des Ziels erneut verknüpft/verknüpft> werden<>.< Das neue Ziel muss den gleichen MethodHandle#type()-Typ wie das vorherige Ziel aufweisen. Daher kann eine Aufrufwebsite zwar erneut mit einer Reihe aufeinander folgender Ziele verknüpft werden, aber nicht ihren Typ ändern.
Hier sehen Sie ein Beispiel für die Verwendung von Aufrufwebsites und Bootstrapmethoden, die jede dynamische Aufrufwebsite verknüpft, um ihre Argumente zu drucken: <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-Dokumentation für java.lang.invoke.CallSite
.
Teile dieser Seite sind Änderungen, die auf Arbeiten basieren, die vom Android Open Source Project erstellt und freigegeben wurden und gemäß den In Attribution License beschriebenen Begriffen verwendet werden.
Konstruktoren
CallSite(IntPtr, JniHandleOwnership) |
Ein |
Eigenschaften
Class |
Gibt die Laufzeitklasse dieses |
Handle |
Das Handle für die zugrunde liegende Android-instance. (Geerbt von Object) |
JniIdentityHashCode |
Ein |
JniPeerMembers |
Ein |
PeerReference |
Ein |
Target |
Ein |
ThresholdClass |
Ein |
ThresholdType |
Ein |
Methoden
Clone() |
Erstellt und gibt eine Kopie dieses Objekts zurück. (Geerbt von Object) |
Dispose() |
Ein |
Dispose(Boolean) |
Ein |
DynamicInvoker() |
Erzeugt ein Methodenhandle, das einer aufrufdynamischen Anweisung entspricht, die mit dieser Aufrufwebsite verknüpft wurde. |
Equals(Object) |
Gibt an, ob ein anderes Objekt "gleich" diesem objekt ist. (Geerbt von Object) |
GetHashCode() |
Gibt einen Hashcodewert für das Objekt zurück. (Geerbt von Object) |
JavaFinalize() |
Wird vom Garbage Collector für ein Objekt aufgerufen, wenn die Garbage Collection feststellt, dass keine Verweise mehr auf das Objekt vorhanden sind. (Geerbt von Object) |
Notify() |
Aktiviert einen einzelnen Thread, der auf den Monitor dieses Objekts wartet. (Geerbt von Object) |
NotifyAll() |
Aktiviert alle Threads, die auf den Monitor dieses Objekts warten. (Geerbt von Object) |
SetHandle(IntPtr, JniHandleOwnership) |
Legt die Handle-Eigenschaft fest. (Geerbt von Object) |
ToArray<T>() |
Ein |
ToString() |
Gibt eine Zeichenfolgendarstellung des Objekts zurück. (Geerbt von Object) |
Type() |
Gibt den Typ des Ziels dieser Aufrufwebsite zurück. |
UnregisterFromRuntime() |
Ein |
Wait() |
Bewirkt, dass der aktuelle Thread wartet, bis er aktiviert ist, in der Regel durch <>Benachrichtigung</em> oder <em>interrupted</em>. (Geerbt von Object) |
Wait(Int64) |
Bewirkt, dass der aktuelle Thread wartet, bis er aktiviert ist, in der Regel durch>< Benachrichtigung</em> oder <em>interrupted</em>, oder bis eine bestimmte Menge an Echtzeit verstrichen ist. (Geerbt von Object) |
Wait(Int64, Int32) |
Bewirkt, dass der aktuelle Thread wartet, bis er aktiviert ist, in der Regel durch>< Benachrichtigung</em> oder <em>interrupted</em>, oder bis eine bestimmte Menge an Echtzeit verstrichen ist. (Geerbt von Object) |
Explizite Schnittstellenimplementierungen
IJavaPeerable.Disposed() |
Ein |
IJavaPeerable.DisposeUnlessReferenced() |
Ein |
IJavaPeerable.Finalized() |
Ein |
IJavaPeerable.JniManagedPeerState |
Ein |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
Ein |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Ein |
IJavaPeerable.SetPeerReference(JniObjectReference) |
Ein |
Erweiterungsmethoden
JavaCast<TResult>(IJavaObject) |
Führt eine Typkonvertierung mit Überprüfung der Android-Laufzeit aus. |
JavaCast<TResult>(IJavaObject) |
Ein |
GetJniTypeName(IJavaPeerable) |
Ein |