MutableCallSite Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
È MutableCallSite un oggetto la CallSite cui variabile di destinazione si comporta come un campo ordinario.
[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
- Ereditarietà
- Attributi
Commenti
È MutableCallSite un oggetto la CallSite cui variabile di destinazione si comporta come un campo ordinario. Un'istruzione invokedynamic collegata a un MutableCallSite delegato tutte le chiamate alla destinazione corrente del sito. Il chiamante dinamico CallSite#dynamicInvoker di un sito di chiamata modificabile delega anche ogni chiamata alla destinazione corrente del sito.
Di seguito è riportato un esempio di sito di chiamata modificabile che introduce una variabile di stato in una catena di handle del metodo. <-- 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>
Lo stesso sito di chiamata può essere usato in più posizioni contemporaneamente. <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>Non-synchronization of target values:</em> A write to a mutable call site's target does not force other threads to become aware of the updated value. I thread che non eseguono azioni di sincronizzazione appropriate relative al sito di chiamata aggiornato possono memorizzare nella cache il valore di destinazione precedente e ritardare l'uso del nuovo valore di destinazione per un tempo indefinito. Si tratta di una conseguenza normale del modello di memoria Java applicato ai campi oggetto.
Per i valori di destinazione che verranno aggiornati di frequente, prendere in considerazione l'uso di un sito di chiamata volatile VolatileCallSite.
per java.lang.invoke.MutableCallSite.
Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dalla e usati in base ai termini descritti in Creative License 2.5 Attribution License.
Costruttori
| Nome | Descrizione |
|---|---|
| MutableCallSite(IntPtr, JniHandleOwnership) |
È |
| MutableCallSite(MethodHandle) |
Crea un oggetto sito di chiamata con un handle del metodo di destinazione iniziale. |
| MutableCallSite(MethodType) |
Crea un oggetto sito di chiamata vuoto con il tipo di metodo specificato. |
Proprietà
| Nome | Descrizione |
|---|---|
| Class |
Restituisce la classe di runtime di questo |
| Handle |
Handle per l'istanza di Android sottostante. (Ereditato da Object) |
| JniIdentityHashCode |
Ottiene il codice hash di identità assegnato a questo Java peer dal runtime di interoperabilità. (Ereditato da Object) |
| JniManagedPeerState |
È |
| JniPeerMembers |
È |
| PeerReference |
Ottiene il riferimento all'oggetto JNI per questo peer Java. (Ereditato da Object) |
| Target |
Restituisce il metodo di destinazione del sito di chiamata, che si comporta come un campo normale dell'oggetto |
| ThresholdClass |
È |
| ThresholdType |
È |
Metodi
| Nome | Descrizione |
|---|---|
| Clone() |
Crea e restituisce una copia di questo oggetto. (Ereditato da Object) |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
È |
| Dispose() |
Rilascia le risorse contenute in questo peer Java. (Ereditato da Object) |
| Dispose(Boolean) |
Rilascia le risorse contenute in questo peer Java. (Ereditato da Object) |
| DisposeUnlessReferenced() |
È |
| DynamicInvoker() |
Produce un handle di metodo equivalente a un'istruzione |
| Equals(Object) |
È |
| Equals(Object) |
Indica se un altro oggetto è "uguale a" questo. (Ereditato da Object) |
| GetHashCode() |
Restituisce un valore di codice hash per l'oggetto . (Ereditato da Object) |
| JavaFinalize() |
Chiamato dal Garbage Collector su un oggetto quando Garbage Collection determina che non sono presenti altri riferimenti all'oggetto . (Ereditato da Object) |
| Notify() |
Riattiva un singolo thread in attesa del monitor dell'oggetto. (Ereditato da Object) |
| NotifyAll() |
Riattiva tutti i thread in attesa del monitor dell'oggetto. (Ereditato da Object) |
| SetHandle(IntPtr, JniHandleOwnership) |
Imposta la proprietà Handle. (Ereditato da Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
È |
| ToArray<T>() |
Crea una matrice gestita da questo wrapper di matrice Java. (Ereditato da Object) |
| ToString() |
Restituisce una rappresentazione di stringa dell'oggetto . (Ereditato da Object) |
| Type() |
Restituisce il tipo di destinazione del sito di chiamata. (Ereditato da CallSite) |
| UnregisterFromRuntime() |
Annulla la registrazione di questo Java peer dal runtime di interoperabilità. (Ereditato da Object) |
| Wait() |
Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo <>una notifica</em> o <em>interrotto</em>. (Ereditato da Object) |
| Wait(Int64, Int32) |
Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo<> una notifica</em> o <em>interrotto</em> o fino a quando non è trascorsa una determinata quantità di tempo reale. (Ereditato da Object) |
| Wait(Int64) |
Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo<> una notifica</em> o <em>interrotto</em> o fino a quando non è trascorsa una determinata quantità di tempo reale. (Ereditato da Object) |
Implementazioni dell'interfaccia esplicita
| Nome | Descrizione |
|---|---|
| IJavaPeerable.Disposed() |
È |
| IJavaPeerable.Finalized() |
È |
| IJavaPeerable.JniObjectReferenceControlBlock |
È |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
È |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
È |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
È |
Metodi di estensione
| Nome | Descrizione |
|---|---|
| GetJniTypeName(IJavaPeerable) |
Ottiene il nome JNI del tipo dell'istanza |
| JavaAs<TResult>(IJavaPeerable) |
Provare a digitare |
| JavaCast<TResult>(IJavaObject) |
Esegue una conversione del tipo di tipo controllato dal runtime Android. |
| JavaCast<TResult>(IJavaObject) |
È |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Provare a digitare |