Condividi tramite


VarHandle Classe

Definizione

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

[Android.Runtime.Register("java/lang/invoke/VarHandle", ApiSince=33, DoNotGenerateAcw=true)]
public abstract class VarHandle : Java.Lang.Object
[<Android.Runtime.Register("java/lang/invoke/VarHandle", ApiSince=33, DoNotGenerateAcw=true)>]
type VarHandle = class
    inherit Object
Ereditarietà
VarHandle
Attributi

Commenti

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap. L'accesso a tali variabili è supportato in varie <modalità< di accesso em>/em>, tra cui accesso in lettura/scrittura normale, accesso in lettura/scrittura volatile e confronto e set.

VarHandles non è modificabile e non ha uno stato visibile. VarHandles non può essere sottoclassato dall'utente.

Un valore VarHandle ha: <ul><li>a #varType variable type T, il tipo di ogni variabile a cui fa riferimento varHandle e <li>un elenco diCT1, CT2, ..., CTn#coordinateTypes coordinate types , i tipi di <espressioni< di coordinate em>/em> che individuano congiuntamente una variabile a cui fa riferimento questo VarHandle. <I tipi di variabili /ul> e coordinate possono essere primitivi o di riferimento e sono rappresentati da Class oggetti . L'elenco dei tipi di coordinate può essere vuoto.

I metodi factory che producono o java.lang.invoke.MethodHandles.Lookup lookup istanze VarHandle documentano il tipo di variabile supportato e l'elenco dei tipi di coordinate.

Ogni modalità di accesso è associata a un <metodo< di modalità di accesso em>/em>, un metodo polimorfico di firma denominato per la modalità di accesso. Quando un metodo della modalità di accesso viene richiamato in un'istanza di VarHandle, gli argomenti iniziali della chiamata sono espressioni di coordinate che indicano esattamente quale oggetto è necessario accedere alla variabile. Gli argomenti finali alla chiamata rappresentano valori di importanza per la modalità di accesso. Ad esempio, le varie modalità di accesso di confronto e confronto o confronto e scambio richiedono due argomenti finali per il valore previsto della variabile e il nuovo valore.

L'arità e i tipi di argomenti per la chiamata di un metodo in modalità di accesso non vengono controllati in modo statico. Ogni metodo della modalità di accesso specifica invece un #accessModeType(AccessMode) access mode typeoggetto , rappresentato come un'istanza di MethodType, che funge da tipo di firma del metodo su cui gli argomenti vengono controllati in modo dinamico. Un tipo di modalità di accesso fornisce tipi di parametri formali in termini di tipi di coordinate di un'istanza VarHandle e i tipi per i valori di importanza per la modalità di accesso. Un tipo di modalità di accesso fornisce anche un tipo restituito, spesso in termini di tipo variabile di un'istanza VarHandle. Quando un metodo della modalità di accesso viene richiamato in un'istanza di VarHandle, il descrittore di tipo simbolico nel sito di chiamata, i tipi di runtime di argomenti alla chiamata e il tipo di runtime del valore restituito, devono corrispondere ai tipi specificati nel tipo di modalità di accesso. Se la corrispondenza ha esito negativo, verrà generata un'eccezione di runtime.

Ad esempio, il metodo #compareAndSet modalità di accesso specifica che se il ricevitore è un'istanza VarHandle con tipi di CT1, ..., CTn coordinate e tipo di Tvariabile , il tipo di modalità di accesso è (CT1 c1, ..., CTn cn, T expectedValue, T newValue)boolean. Si supponga che un'istanza VarHandle possa accedere agli elementi della matrice e che i relativi tipi di coordinate siano String[] e int mentre il tipo di variabile è String. Il tipo di modalità di accesso per in compareAndSet questa istanza varHandle sarà (String[] c1, int c2, String expectedValue, String newValue)boolean. Tale istanza di VarHandle può essere prodotta dagli elementi della MethodHandles#arrayElementVarHandle(Class) array factory method matrice di accesso e come indicato di seguito:

{@code
            String[] sa = ...
            VarHandle avh = MethodHandles.arrayElementVarHandle(String[].class);
            boolean r = avh.compareAndSet(sa, 10, "expected", "new");
            }

Le modalità di accesso controllano l'atomicità e le proprietà di coerenza. <>Gli accessi em Plain</em> read (get) e write (set) sono garantiti come atomici bit per bit solo per i riferimenti e per i valori primitivi di al massimo 32 bit e non impongono vincoli di ordinamento osservabili rispetto ai thread diversi dal thread in esecuzione. <>le operazioni opache</em> sono atomiche bit per bit e ordinate in modo coerente rispetto agli accessi alla stessa variabile. Oltre a obbedire alle proprietà opache, <le>letture in modalità Acquire</em> e i relativi accessi successivi vengono ordinati dopo <le scritture in modalità em>Release</em> e i relativi accessi precedenti. Oltre a rispettare le proprietà Acquire e Release, tutte le <operazioni em>Volatile</em> sono completamente ordinate rispetto l'una all'altra.

Le modalità di accesso sono raggruppate nelle categorie seguenti: <ul><li>read access mode che ottengono il valore di una variabile in base agli effetti di ordinamento della memoria specificati. Il set di metodi di modalità di accesso corrispondenti appartenenti a questo gruppo è costituito dai metodi #get get, #getVolatile getVolatile, #getAcquire getAcquire, #getOpaque getOpaque. <modalità di accesso in scrittura li>che impostano il valore di una variabile con gli effetti di ordinamento della memoria specificati. Il set di metodi di modalità di accesso corrispondenti appartenenti a questo gruppo è costituito dai metodi #set set, #setVolatile setVolatile, #setRelease setRelease, #setOpaque setOpaque. <li>atomic update access mode che, ad esempio, confrontano atomicamente e impostano il valore di una variabile con gli effetti di ordinamento della memoria specificati. Il set di metodi della modalità di accesso corrispondenti appartenenti a questo gruppo è costituito dai metodi #compareAndSet compareAndSet, #weakCompareAndSetAcquire weakCompareAndSetAcquire#weakCompareAndSetPlain weakCompareAndSetPlain#getAndSetAcquire getAndSetAcquire#weakCompareAndSet weakCompareAndSet#compareAndExchangeRelease compareAndExchangeRelease#weakCompareAndSetRelease weakCompareAndSetRelease#compareAndExchangeAcquire compareAndExchangeAcquire#compareAndExchange compareAndExchange#getAndSet getAndSet. #getAndSetRelease getAndSetRelease <li>numeric atomic update access mode che, ad esempio, ottenere e impostare in modo atomico con l'aggiunta del valore di una variabile in base agli effetti di ordinamento della memoria specificati. Il set di metodi di modalità di accesso corrispondenti appartenenti a questo gruppo è costituito dai metodi #getAndAdd getAndAdd, #getAndAddAcquire getAndAddAcquire, #getAndAddRelease getAndAddRelease, li>< modalità di accesso agli aggiornamenti atomici bit per bit che, ad esempio, ottengono e or bit per bit atomicamente il valore di una variabile con gli effetti di ordinamento della memoria specificati. Il set di metodi della modalità di accesso corrispondenti appartenenti a questo gruppo è costituito dai metodi #getAndBitwiseOr getAndBitwiseOr, #getAndBitwiseAnd getAndBitwiseAnd#getAndBitwiseAndRelease getAndBitwiseAndRelease#getAndBitwiseOrAcquire getAndBitwiseOrAcquire#getAndBitwiseAndAcquire getAndBitwiseAndAcquire#getAndBitwiseXor getAndBitwiseXor#getAndBitwiseOrRelease getAndBitwiseOrRelease, . #getAndBitwiseXorRelease getAndBitwiseXorRelease#getAndBitwiseXorAcquire getAndBitwiseXorAcquire </ul>

I metodi factory che producono o java.lang.invoke.MethodHandles.Lookup lookup istanze VarHandle documentano il set di modalità di accesso supportate, che possono includere anche restrizioni di documentazione in base al tipo di variabile e se una variabile è di sola lettura. Se una modalità di accesso non è supportata, il metodo della modalità di accesso corrispondente genererà un'eccezione UnsupportedOperationException. I metodi factory devono documentare eventuali eccezioni non dichiarati aggiuntive che possono essere generate dai metodi della modalità di accesso. La #get get modalità di accesso è supportata per tutte le istanze VarHandle e il metodo corrispondente non genera mai .UnsupportedOperationException Se un varHandle fa riferimento a una variabile di sola lettura (ad esempio un final campo), scrivere, aggiornare atomica, aggiornare numericamente e le modalità di accesso agli aggiornamenti atomici bit per bit non sono supportati e i metodi corrispondenti generano UnsupportedOperationException. Le modalità di accesso in lettura/scrittura (se supportate), ad eccezione di get e set, forniscono l'accesso atomico per i tipi di riferimento e per tutti i tipi primitivi. Se non diversamente indicato nella documentazione di un metodo factory, le modalità get di accesso e set (se supportate) forniscono l'accesso atomico per i tipi riferimento e tutti i tipi primitivi, ad eccezione di long e double su piattaforme a 32 bit.

Le modalità di accesso eseguiranno l'override di tutti gli effetti di ordinamento della memoria specificati nel sito di dichiarazione di una variabile. Ad esempio, un valore VarHandle che accede a un campo usando la get modalità di accesso accederà al campo come specificato <em>dalla modalità< di accesso/em> anche se tale campo è dichiarato volatile. Quando si esegue l'accesso misto è necessario prestare estrema attenzione perché il modello di memoria Java può consentire risultati sorprendenti.

Oltre a supportare l'accesso alle variabili in diverse modalità di accesso, viene fornito anche un set di metodi statici, detti metodi di isolamento della memoria, per il controllo granulare dell'ordinamento della memoria.

La specifica del linguaggio Java consente ad altri thread di osservare le operazioni come se fossero eseguite in ordini diversi da quelli evidenti nel codice sorgente del programma, soggetti a vincoli derivanti, ad esempio, dall'uso di blocchi, volatile campi o VarHandles. I metodi statici, #fullFence fullFence, #acquireFence acquireFence, #loadLoadFence loadLoadFence #releaseFence releaseFencee #storeStoreFence storeStoreFence, possono essere usati anche per imporre vincoli. Le loro specifiche, come avviene per determinate modalità di accesso, sono frasi in termini di mancanza di "riordinazioni" - effetti di ordinamento osservabili che potrebbero verificarsi altrimenti se il recinto non era presente. Una formulazione più precisa della specifica dei metodi di modalità di accesso e dei metodi di isolamento della memoria può accompagnare gli aggiornamenti futuri della specifica del linguaggio Java.

<h1>La compilazione della chiamata di metodi< modalità di accesso/h1> Un'espressione di chiamata al metodo Java che denomina un metodo in modalità di accesso può richiamare un valore VarHandle dal codice sorgente Java. Dal punto di vista del codice sorgente, questi metodi possono accettare qualsiasi argomento e il relativo risultato polimorfico (se espresso) può essere eseguito il cast a qualsiasi tipo restituito. Questa operazione viene eseguita formalmente assegnando ai metodi di modalità di accesso argomenti di arità Object variabile e Object tipi restituiti (se il tipo restituito è polimorfico), ma hanno una qualità aggiuntiva denominata <>polimorfismo< della firma/em> che connette questa libertà di chiamata direttamente allo stack di esecuzione JVM.

Come avviene di solito con i metodi virtuali, le chiamate a livello di origine ai metodi della modalità di accesso vengono compilate in un'istruzione invokevirtual . In modo più insolito, il compilatore deve registrare i tipi di argomento effettivi e potrebbe non eseguire conversioni di chiamate al metodo sugli argomenti. Deve invece generare istruzioni per eseguirne il push nello stack in base ai propri tipi non convertiti. L'oggetto VarHandle stesso verrà inserito nello stack prima degli argomenti. Il compilatore genera quindi un'istruzione invokevirtual che richiama il metodo modalità di accesso con un descrittore di tipo simbolico che descrive l'argomento e i tipi restituiti.

Per rilasciare un descrittore di tipo simbolico completo, il compilatore deve anche determinare il tipo restituito (se polimorfico). Questa operazione si basa su un cast sull'espressione di chiamata al metodo, se presente oppure Object se la chiamata è un'espressione oppure void se la chiamata è un'istruzione . Il cast può essere di un tipo primitivo (ma non void).

Come caso di angolo, a un argomento non sottoposto a null cast viene assegnato un descrittore di tipo simbolico di java.lang.Void. L'ambiguità con il tipo Void è innocua, poiché non sono presenti riferimenti di tipo Void ad eccezione del riferimento Null.

<h1>"invoke">Esecuzione di chiamate di metodi< modalità di accesso/h1> La prima volta che viene eseguita un'istruzione invokevirtual viene collegata risolvendo simbolicamente i nomi nell'istruzione e verificando che la chiamata al metodo sia legale in modo statico. Questo vale anche per le chiamate ai metodi della modalità di accesso. In questo caso, il descrittore di tipo simbolico generato dal compilatore viene controllato per la sintassi corretta e i nomi in esso contenuti vengono risolti. Pertanto, un'istruzione invokevirtual che richiama un metodo in modalità di accesso verrà sempre collegato, purché il descrittore di tipo simbolico sia sintatticamente ben formato e i tipi esistano.

Quando l'oggetto invokevirtual viene eseguito dopo il collegamento, il tipo di modalità di accesso di VarHandle ricevuto viene prima controllato dalla JVM per assicurarsi che corrisponda al descrittore di tipo simbolico. Se la corrispondenza del tipo ha esito negativo, significa che il metodo della modalità di accesso che il chiamante sta richiamando non è presente sul singolo VarHandle richiamato.

La chiamata di un metodo in modalità di accesso si comporta come se una chiamata di MethodHandle#invoke, dove l'handle del metodo ricevente accetta l'istanza VarHandle come argomento iniziale. In particolare, quanto segue, dove {access-mode} corrisponde al nome del metodo della modalità di accesso:

{@code
            VarHandle vh = ..
            R r = (R) vh.{access-mode}(p1, p2, ..., pN);
            }

si comporta come se:

{@code
            VarHandle vh = ..
            VarHandle.AccessMode am = VarHandle.AccessMode.valueFromMethodName("{access-mode}");
            MethodHandle mh = MethodHandles.varHandleExactInvoker(
                                  am,
                                  vh.accessModeType(am));

            R r = (R) mh.invoke(vh, p1, p2, ..., pN)
            }

I metodi della modalità di accesso al modulo non dichiarano la creazione di Throwable. Equivale a:

{@code
            MethodHandle mh = MethodHandles.lookup().findVirtual(
                                  VarHandle.class,
                                  "{access-mode}",
                                  MethodType.methodType(R, p1, p2, ..., pN));

            R r = (R) mh.invokeExact(vh, p1, p2, ..., pN)
            }

dove il tipo di metodo desiderato è il descrittore di tipo simbolico e viene eseguito un MethodHandle#invokeExact oggetto , poiché prima della chiamata della destinazione, l'handle applicherà i cast di riferimento in base alle esigenze e ai valori box, unbox o primitive widen, come se MethodHandle#asType asType fosse (vedere anche MethodHandles#varHandleInvoker).

In modo più conciso, tale comportamento equivale a:

{@code
            VarHandle vh = ..
            VarHandle.AccessMode am = VarHandle.AccessMode.valueFromMethodName("{access-mode}");
            MethodHandle mh = vh.toMethodHandle(am);

            R r = (R) mh.invoke(p1, p2, ..., pN)
            }

In questo caso, l'handle del metodo viene associato all'istanza di VarHandle.

<h1>Controllo< chiamate/h1> Nei programmi tipici, la corrispondenza dei tipi di modalità di accesso VarHandle avrà in genere esito positivo. Tuttavia, se una corrispondenza ha esito negativo, la JVM genererà un'eccezione WrongMethodTypeException.

Di conseguenza, un tipo di modalità di accesso non corrispondente che potrebbe essere visualizzato come errore di collegamento in un programma tipizzato in modo statico può essere visualizzato come dinamico WrongMethodTypeException in un programma che usa VarHandles.

Poiché i tipi di modalità di accesso contengono oggetti "attivi", Class la corrispondenza dei tipi di metodo tiene conto sia dei nomi dei tipi che dei caricatori di classi. Pertanto, anche se un varHandle VH viene creato in un caricatore L1 di classi e usato in un altro L2metodo , le chiamate al metodo di accesso VarHandle sono indipendenti dai tipi, perché il descrittore di tipo simbolico del chiamante, come risolto in L2, viene confrontato con il descrittore di tipo simbolico del metodo chiamato originale, come risolto in L1. La risoluzione in L1 si verifica quando VH viene creato e i relativi tipi di modalità di accesso vengono assegnati, mentre la risoluzione in L2 si verifica quando l'istruzione invokevirtual è collegata.

Oltre ai controlli del descrittore di tipo, la funzionalità di VarHandles per accedere alle variabili non è limitata. Se un valore VarHandle viene formato in una variabile non pubblica da una classe che ha accesso a tale variabile, è possibile usare varHandle risultante in qualsiasi posizione da qualsiasi chiamante che riceve un riferimento a tale variabile.

A differenza dell'API Reflection core, in cui l'accesso viene controllato ogni volta che viene richiamato un metodo riflettente, il controllo di accesso VarHandle viene eseguito quando viene creato VarHandle. Pertanto, VarHandles a variabili non pubbliche o a variabili in classi non pubbliche, in genere devono essere mantenute segrete. Non devono essere passati a codice non attendibile, a meno che l'uso del codice non attendibile non sia innocuo.

<h1>VarHandle creation</h1> Java code can create a VarHandle that directly accesses any field that is accessible to that code. Questa operazione viene eseguita tramite un'API basata su funzionalità riflettente denominata java.lang.invoke.MethodHandles.Lookup MethodHandles.Lookup. Ad esempio, un valore VarHandle per un campo non statico può essere ottenuto da java.lang.invoke.MethodHandles.Lookup#findVarHandle Lookup.findVarHandle. È anche disponibile un metodo di conversione da oggetti DELL'API Reflection core, java.lang.invoke.MethodHandles.Lookup#unreflectVarHandle Lookup.unreflectVarHandle.

L'accesso ai membri del campo protetto è limitato ai ricevitori solo della classe di accesso o a una delle relative sottoclassi e la classe di accesso deve a sua volta essere una sottoclasse (o un pacchetto di pari livello) della classe di definizione del membro protetto. Se un valore VarHandle fa riferimento a un campo non statico protetto di una classe dichiarante all'esterno del pacchetto corrente, l'argomento ricevitore verrà ristretto al tipo della classe di accesso.

<h1>Interoperabilità tra VarHandles e l'API< Reflection core/h1> Usando i metodi factory nell'API java.lang.invoke.MethodHandles.Lookup Lookup , qualsiasi campo rappresentato da un oggetto API Reflection core può essere convertito in un valore VarHandle equivalente dal comportamento. Ad esempio, un riflettente java.lang.reflect.Field Field può essere convertito in un valore VarHandle usando java.lang.invoke.MethodHandles.Lookup#unreflectVarHandle Lookup.unreflectVarHandle. Le VarHandles risultanti offrono in genere un accesso più diretto ed efficiente ai campi sottostanti.

Come caso speciale, quando l'API Reflection principale viene usata per visualizzare i metodi della modalità di accesso polimorfico della firma in questa classe, vengono visualizzati come metodi non polimorfici ordinari. L'aspetto riflettente, come visualizzato da java.lang.Class#getDeclaredMethod Class.getDeclaredMethod, non è influenzato dal relativo stato speciale in questa API. Ad esempio, java.lang.reflect.Method#getModifiers Method.getModifiers in questo caso e i bit del modificatore necessari per qualsiasi metodo dichiarato in modo analogo, inclusi in questo caso native e varargs bit.

Come per qualsiasi metodo riflesso, questi metodi (quando riflesse) possono essere richiamati direttamente tramite , tramite java.lang.reflect.Method#invoke java.lang.reflect.Method.invokeJNI o indirettamente tramite java.lang.invoke.MethodHandles.Lookup#unreflect Lookup.unreflect. Tuttavia, tali chiamate riflettenti non comportano chiamate al metodo in modalità di accesso. Tale chiamata, se è stato passato l'argomento obbligatorio (un singolo, di tipo Object[]), ignorerà l'argomento e genererà un'eccezione UnsupportedOperationException.

Poiché invokevirtual le istruzioni possono richiamare in modo nativo i metodi della modalità di accesso VarHandle in qualsiasi descrittore di tipo simbolico, questa visualizzazione riflettente è in conflitto con la normale presentazione di questi metodi tramite bytecode. Pertanto, questi metodi nativi, quando visualizzati in modo riflessivo da Class.getDeclaredMethod, possono essere considerati solo segnaposto.

Per ottenere un metodo invoker per un tipo di modalità di accesso specifico, usare java.lang.invoke.MethodHandles#varHandleExactInvoker o java.lang.invoke.MethodHandles#varHandleInvoker. L'API java.lang.invoke.MethodHandles.Lookup#findVirtual Lookup.findVirtual è anche in grado di restituire un handle di metodo per chiamare un metodo in modalità di accesso per qualsiasi tipo di modalità di accesso specificato ed è equivalente al comportamento di java.lang.invoke.MethodHandles#varHandleInvoker.

<L'interoperabilità h1>tra VarHandles e Java generics/h1> A VarHandle può essere ottenuta per una variabile, ad esempio un campo, dichiarato con tipi generici< Java. Come per l'API Reflection core, il tipo di variabile VarHandle verrà costruito dalla cancellazione del tipo a livello di origine. Quando viene richiamato un metodo di modalità di accesso VarHandle, i tipi dei relativi argomenti o il tipo cast del valore restituito possono essere tipi generici o istanze di tipo. In questo caso, il compilatore sostituirà tali tipi in base alle relative eliminazioni quando costruisce il descrittore di tipo simbolico per l'istruzione invokevirtual .

Aggiunta in 9.

Documentazione java per java.lang.invoke.VarHandle.

Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dal progetto Open Source Android e usato in base ai termini descritti nella licenza Creative Commons 2.5 Attribuzione.

Costruttori

VarHandle(IntPtr, JniHandleOwnership)

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

Proprietà

Class

Restituisce la classe di runtime di questo Objectoggetto .

(Ereditato da Object)
Handle

Handle per l'istanza di Android sottostante.

(Ereditato da Object)
JniIdentityHashCode

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

(Ereditato da Object)
JniPeerMembers

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

PeerReference

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

(Ereditato da Object)
ThresholdClass

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

ThresholdType

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

Metodi

AccessModeType(VarHandle+AccessMode)

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

AcquireFence()

Assicura che i carichi prima della recinzione non verranno riordinati con carichi e negozi dopo la recinzione.

Clone()

Crea e restituisce una copia di questo oggetto.

(Ereditato da Object)
CompareAndExchange(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

CompareAndExchangeAcquire(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

CompareAndExchangeRelease(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

CompareAndSet(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

CoordinateTypes()

Restituisce i tipi di coordinate per questo oggetto VarHandle.

Dispose()

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

(Ereditato da Object)
Dispose(Boolean)

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

(Ereditato da Object)
Equals(Object)

Indica se un altro oggetto è "uguale a" questo.

(Ereditato da Object)
FullFence()

Assicura che carichi e archivi prima che la recinzione non venga riordinata con carichi e negozi dopo la recinzione.

Get(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetAcquire(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetAndAdd(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetAndAddAcquire(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetAndAddRelease(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetAndBitwiseAnd(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetAndBitwiseAndAcquire(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetAndBitwiseAndRelease(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetAndBitwiseOr(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetAndBitwiseOrAcquire(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetAndBitwiseOrRelease(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetAndBitwiseXor(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetAndBitwiseXorAcquire(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetAndBitwiseXorRelease(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetAndSet(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetAndSetAcquire(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetAndSetRelease(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetHashCode()

Restituisce un valore del codice hash per l'oggetto.

(Ereditato da Object)
GetOpaque(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetVolatile(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

IsAccessModeSupported(VarHandle+AccessMode)

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

JavaFinalize()

Chiamato dal Garbage Collector su un oggetto quando Garbage Collection determina che non sono presenti altri riferimenti all'oggetto .

(Ereditato da Object)
LoadLoadFence()

Assicura che i carichi prima della recinzione non verranno riordinati con carichi dopo la recinzione.

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)
ReleaseFence()

Assicura che carichi e archivi prima che la recinzione non venga riordinata con negozi dopo la recinzione.

Set(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

SetHandle(IntPtr, JniHandleOwnership)

Imposta la proprietà Handle.

(Ereditato da Object)
SetOpaque(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

SetRelease(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

SetVolatile(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

StoreStoreFence()

Assicura che i negozi prima della recinzione non verranno riordinati con negozi dopo la recinzione.

ToArray<T>()

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

(Ereditato da Object)
ToMethodHandle(VarHandle+AccessMode)

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

ToString()

Restituisce una rappresentazione di stringa dell'oggetto.

(Ereditato da Object)
UnregisterFromRuntime()

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

(Ereditato da Object)
VarType()

Restituisce il tipo di variabile delle variabili a cui fa riferimento varHandle.

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)
WeakCompareAndSet(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

WeakCompareAndSetAcquire(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

WeakCompareAndSetPlain(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

WeakCompareAndSetRelease(Object[])

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

Implementazioni dell'interfaccia esplicita

IJavaPeerable.Disposed()

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

(Ereditato da Object)
IJavaPeerable.DisposeUnlessReferenced()

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

(Ereditato da Object)
IJavaPeerable.Finalized()

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

(Ereditato da Object)
IJavaPeerable.JniManagedPeerState

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

(Ereditato da Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

(Ereditato da Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

(Ereditato da Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

(Ereditato da Object)

Metodi di estensione

JavaCast<TResult>(IJavaObject)

Esegue una conversione del tipo di tipo controllato dal runtime Android.

JavaCast<TResult>(IJavaObject)

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

GetJniTypeName(IJavaPeerable)

VarHandle è un riferimento fortemente tipizzato dinamicamente a una variabile o a una famiglia di variabili definita in modo parametrico, inclusi campi statici, campi non statici, elementi di matrice o componenti di una struttura di dati off-heap.

Si applica a