Compartir a través de


VarHandle Clase

Definición

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

[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
Herencia
VarHandle
Atributos

Comentarios

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón. El acceso a estas variables se admite en varios <modos< de acceso em>/em>, incluido el acceso de lectura y escritura sin formato, el acceso de lectura y escritura volátil y el conjunto de comparación y escritura.

VarHandles son inmutables y no tienen ningún estado visible. VarHandles no puede ser subclasado por el usuario.

Un VarHandle tiene: <ul><li>a #varType variable type T, el tipo de cada variable a la que hace referencia este VarHandle; y <li>una lista de , los tipos de #coordinateTypes coordinate typesCT1, CT2, ..., CTnexpresiones de <coordenadas< em>/em> que encuentran conjuntamente una variable a la que hace referencia este VarHandle. <Los tipos de coordenadas y variables /ul> pueden ser primitivos o referencias, y se representan mediante Class objetos . La lista de tipos de coordenadas puede estar vacía.

Los métodos de fábrica que generan o java.lang.invoke.MethodHandles.Lookup lookup las instancias varHandle documenten el tipo de variable admitido y la lista de tipos de coordenadas.

Cada modo de acceso está asociado a un <método< de modo de acceso em>/em>, un método polimórfico de firma denominado para el modo de acceso. Cuando se invoca un método de modo de acceso en una instancia varHandle, los argumentos iniciales de la invocación son expresiones de coordenadas que indican en qué objeto se va a tener acceso a la variable. Los argumentos finales de la invocación representan valores de importancia para el modo de acceso. Por ejemplo, los distintos modos de acceso compare-and-set o compare-and-exchange requieren dos argumentos finales para el valor esperado de la variable y el nuevo valor.

La aridad y los tipos de argumentos a la invocación de un método de modo de acceso no se comprueban estáticamente. En su lugar, cada método de modo de acceso especifica un #accessModeType(AccessMode) access mode type, representado como una instancia de MethodType, que actúa como un tipo de firma de método con el que los argumentos se comprueban dinámicamente. Un tipo de modo de acceso proporciona tipos de parámetros formales en términos de los tipos de coordenadas de una instancia varHandle y los tipos para los valores de importancia para el modo de acceso. Un tipo de modo de acceso también proporciona un tipo de valor devuelto, a menudo en términos del tipo de variable de una instancia varHandle. Cuando se invoca un método de modo de acceso en una instancia varHandle, el descriptor de tipo simbólico del sitio de llamada, los tipos de argumentos en tiempo de ejecución a la invocación y el tipo de tiempo de ejecución del valor devuelto deben coincidir con los tipos especificados en el tipo de modo de acceso. Se producirá una excepción en tiempo de ejecución si se produce un error en la coincidencia.

Por ejemplo, el método #compareAndSet de modo de acceso especifica que si su receptor es una instancia de VarHandle con tipos de coordenadas CT1, ..., CTn y tipo Tde variable , su tipo de modo de acceso es (CT1 c1, ..., CTn cn, T expectedValue, T newValue)boolean. Supongamos que una instancia de VarHandle puede tener acceso a los elementos de matriz y que sus tipos de coordenadas son String[] y int mientras su tipo de variable es String. El tipo de modo de acceso para compareAndSet en esta instancia de VarHandle sería (String[] c1, int c2, String expectedValue, String newValue)boolean. Tal instancia de VarHandle puede ser generada por los elementos de matriz MethodHandles#arrayElementVarHandle(Class) array factory method de acceso y como se indica a continuación:

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

Los modos de acceso controlan la atomicidad y las propiedades de coherencia. <Se garantiza que los accesos de lectura y escritura (get) em plain</em>> soloset son atómicos bit a bit para las referencias y para los valores primitivos de como máximo 32 bits e imponen restricciones de ordenación observables con respecto a los subprocesos distintos del subproceso en ejecución. <Las operaciones em>Opaque</em> son atómicas bit a bit y se ordenan coherentemente con respecto a los accesos a la misma variable. Además de obedecer las propiedades opacas, <las>lecturas en modo Em Acquire</em> y sus accesos posteriores se ordenan después de coincidir <con las escrituras del modo em>Release</em> y sus accesos anteriores. Además de obedecer las propiedades Acquire y Release, todas las <operaciones em>Volatile</em> están totalmente ordenadas entre sí.

Los modos de acceso se agrupan en las siguientes categorías: <los modos de acceso de lectura ul><li>que obtienen el valor de una variable en los efectos de ordenación de memoria especificados. El conjunto de métodos de modo de acceso correspondientes que pertenecen a este grupo consta de los métodos #get get, #getVolatile getVolatile, #getAcquire getAcquire, #getOpaque getOpaque. <>modos de acceso de escritura li que establecen el valor de una variable bajo efectos de ordenación de memoria especificados. El conjunto de métodos de modo de acceso correspondientes que pertenecen a este grupo consta de los métodos #set set, #setVolatile setVolatile, #setRelease setRelease, #setOpaque setOpaque. <li>atomic update access modes that, for example, atomically compare and set the value of a variable under specified memory ordering effects. El conjunto de métodos de modo de acceso correspondientes que pertenecen a este grupo consta de los métodos #compareAndSet compareAndSet, #weakCompareAndSetPlain weakCompareAndSetPlain, #compareAndExchangeAcquire compareAndExchangeAcquire#weakCompareAndSetRelease weakCompareAndSetRelease#weakCompareAndSet weakCompareAndSet#weakCompareAndSetAcquire weakCompareAndSetAcquire#compareAndExchange compareAndExchange, #compareAndExchangeRelease compareAndExchangeRelease, #getAndSet getAndSet, #getAndSetAcquire getAndSetAcquire, . #getAndSetRelease getAndSetRelease <li>numeric atomic update access modes that, for example, atomically get and set with addition the value of a variable under specified memory ordering effects. El conjunto de métodos de modo de acceso correspondientes que pertenecen a este grupo consta de los métodos #getAndAdd getAndAdd, #getAndAddAcquire getAndAddAcquire, #getAndAddRelease getAndAddRelease, modos>< de acceso de actualización atómica bit a bit que, por ejemplo, obtienen y bit a bit OR el valor de una variable bajo efectos de ordenación de memoria especificados. El conjunto de métodos de modo de acceso correspondientes que pertenecen a este grupo consta de los métodos #getAndBitwiseOr getAndBitwiseOr, #getAndBitwiseOrAcquire getAndBitwiseOrAcquire, #getAndBitwiseAndRelease getAndBitwiseAndRelease#getAndBitwiseAnd getAndBitwiseAnd#getAndBitwiseOrRelease getAndBitwiseOrRelease#getAndBitwiseAndAcquire getAndBitwiseAndAcquire, #getAndBitwiseXor getAndBitwiseXor, , #getAndBitwiseXorAcquire getAndBitwiseXorAcquire, . #getAndBitwiseXorRelease getAndBitwiseXorRelease </ul>

Los métodos de fábrica que generan instancias de java.lang.invoke.MethodHandles.Lookup lookup VarHandle documenten el conjunto de modos de acceso admitidos, que también pueden incluir restricciones de documentación basadas en el tipo de variable y si una variable es de solo lectura. Si no se admite un modo de acceso, el método de modo de acceso correspondiente producirá una UnsupportedOperationExceptioninvocación . Los métodos de fábrica deben documentar las excepciones no declaradas adicionales que puedan iniciarse mediante métodos de modo de acceso. El #get get modo de acceso es compatible con todas las instancias de VarHandle y el método correspondiente nunca produce UnsupportedOperationException. Si varHandle hace referencia a una variable de solo lectura (por ejemplo, un final campo), no se admiten los métodos de escritura, actualización atómica atómica, actualización atómica numérica y modos de acceso de actualización atómica bit a bit y los métodos correspondientes inician UnsupportedOperationException. Los modos de acceso de lectura y escritura (si se admiten), con la excepción de y set, proporcionan acceso atómico para los tipos de get referencia y todos los tipos primitivos. A menos que se indique lo contrario en la documentación de un método de fábrica, los modos get de acceso y set (si se admiten) proporcionan acceso atómico para los tipos de referencia y todos los tipos primitivos, a excepción de y double en plataformas de long 32 bits.

Los modos de acceso invalidarán los efectos de ordenación de memoria especificados en el sitio de declaración de una variable. Por ejemplo, un VarHandle que accede a un campo mediante el get modo de acceso tendrá acceso al campo tal como se especifica <>en su modo< de acceso/em> incluso si ese campo se declara volatile. Cuando se realiza un acceso mixto, se debe tener cuidado extremo, ya que el modelo de memoria de Java puede permitir resultados sorprendentes.

Además de admitir el acceso a variables en varios modos de acceso, también se proporciona un conjunto de métodos estáticos, denominados métodos de barrera de memoria, para el control específico de la ordenación de memoria.

La especificación del lenguaje Java permite que otros subprocesos observen las operaciones como si se ejecutaran en órdenes diferentes de las que se muestran en el código fuente del programa, sujeto a restricciones derivadas, por ejemplo, del uso de bloqueos, volatile campos o VarHandles. Los métodos estáticos, #fullFence fullFence, #acquireFence acquireFence, #loadLoadFence loadLoadFence#releaseFence releaseFencey #storeStoreFence storeStoreFence, también se pueden usar para imponer restricciones. Sus especificaciones, como sucede con determinados modos de acceso, se definen en términos de la falta de "reordenaciones", efectos de ordenación observables que podrían producirse de otro modo si la barrera no estaba presente. La expresión más precisa de la especificación de métodos de modo de acceso y métodos de barrera de memoria puede acompañar futuras actualizaciones de la Especificación del lenguaje Java.

<h1>Compilar la invocación de métodos< de modo de acceso/h1> Una expresión de llamada de método java que denomina un método de modo de acceso puede invocar un VarHandle desde código fuente de Java. Desde el punto de vista del código fuente, estos métodos pueden tomar cualquier argumento y su resultado polimórfico (si se expresa) se puede convertir a cualquier tipo de valor devuelto. Formalmente, esto se logra al proporcionar los argumentos de aridad Object variable de los métodos de acceso y Object los tipos devueltos (si el tipo de valor devuelto es polimórfico), pero tienen una calidad adicional denominada <polimorfismo<> de firma em>que conecta esta libertad de invocación directamente a la pila de ejecución de JVM.

Como es habitual con los métodos virtuales, las llamadas de nivel de origen para obtener acceso a los métodos de modo se compilan en una invokevirtual instrucción. Más inusualmente, el compilador debe registrar los tipos de argumento reales y puede que no realice conversiones de invocación de método en los argumentos. En su lugar, debe generar instrucciones para insertarlas en la pila según sus propios tipos no convertidos. El propio objeto VarHandle se insertará en la pila antes de los argumentos. A continuación, el compilador genera una invokevirtual instrucción que invoca el método de modo de acceso con un descriptor de tipo simbólico que describe el argumento y los tipos devueltos.

Para emitir un descriptor de tipo simbólico completo, el compilador también debe determinar el tipo de valor devuelto (si es polimórfico). Esto se basa en una conversión en la expresión de invocación de método, si hay una, o si Object la invocación es una expresión, o si void la invocación es una instrucción . La conversión puede ser de un tipo primitivo (pero no void).

Como caso de esquina, a un argumento sin null difusión se le asigna un descriptor de tipo simbólico de java.lang.Void. La ambigüedad con el tipo Void es inofensiva, ya que no hay referencias de tipo Void excepto la referencia nula.

<h1>"invoke">Performing invocation of access mode methods</h1> The first time an invokevirtual instruction is executed it is linked by symbolically resolving the names in the instruction and verifying that the method call is statically legal. Esto también se mantiene para las llamadas a métodos de modo de acceso. En este caso, el descriptor de tipo simbólico emitido por el compilador se comprueba si hay sintaxis correcta y los nombres que contiene se resuelven. Por lo tanto, una invokevirtual instrucción que invoca un método de modo de acceso siempre se vinculará, siempre que el descriptor de tipo simbólico tenga un formato sintáctico y existan los tipos.

invokevirtual Cuando se ejecuta después de la vinculación, el JVM comprueba primero el tipo de modo de acceso de VarHandle receptor para asegurarse de que coincide con el descriptor de tipo simbólico. Si se produce un error en la coincidencia de tipo, significa que el método de modo de acceso al que se invoca el autor de la llamada no está presente en el varHandle individual que se invoca.

La invocación de un método de modo de acceso se comporta como si una invocación de MethodHandle#invoke, donde el identificador de método receptor acepta la instancia varHandle como argumento inicial. Más concretamente, lo siguiente, donde {access-mode} corresponde al nombre del método de modo de acceso:

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

se comporta como si:

{@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)
            }

(los métodos del modo de acceso modulo no declaran la iniciación de Throwable). Esto 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)
            }

donde el tipo de método deseado es el descriptor de tipo simbólico y MethodHandle#invokeExact se realiza , ya que antes de la invocación del destino, el identificador aplicará conversiones de referencia según sea necesario y los valores primitivos de cuadro, unbox o anchon, como si fuera MethodHandle#asType asType (vea también MethodHandles#varHandleInvoker).

De manera más concisa, este comportamiento es equivalente 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)
            }

Donde, en este caso, el identificador del método se enlaza a la instancia de VarHandle.

<h1>Comprobación de< invocación/h1> En programas típicos, la coincidencia de tipos de modo de acceso VarHandle normalmente se realizará correctamente. Pero si se produce un error en una coincidencia, la JVM iniciará una WrongMethodTypeExceptionexcepción .

Por lo tanto, un error de coincidencia de tipo de modo de acceso que podría aparecer como un error de vinculación en un programa con tipo estático puede aparecer como dinámico WrongMethodTypeException en un programa que usa VarHandles.

Dado que los tipos de modo de acceso contienen objetos "dinámicos", Class la coincidencia de tipos de método tiene en cuenta los nombres de tipo y los cargadores de clases. Por lo tanto, incluso si se crea varHandle VH en un cargador L1 de clases y se usa en otra L2, las llamadas al método de modo de acceso VarHandle son seguras para tipos, porque el descriptor de tipo simbólico del autor de la llamada, tal como se resuelve en L2, coincide con el descriptor de tipo simbólico del método de llamada original, como se resuelve en L1. La resolución de L1 se produce cuando VH se crea y se asignan sus tipos de modo de acceso, mientras que la resolución en L2 se produce cuando la invokevirtual instrucción está vinculada.

Además de las comprobaciones de descriptores de tipo, la capacidad de varHandles para acceder a las variables no está restringida. Si varHandle se forma en una variable no pública por una clase que tiene acceso a esa variable, cualquier llamador que reciba una referencia a ella puede usar varHandle resultante en cualquier lugar.

A diferencia de Core Reflection API, donde se comprueba el acceso cada vez que se invoca un método reflectante, se realiza la comprobación de acceso VarHandle cuando se crea VarHandle. Por lo tanto, VarHandles a variables no públicas o a variables de clases no públicas, normalmente deben mantenerse secretas. No deben pasarse al código que no es de confianza a menos que su uso del código que no sea de confianza sea inofensivo.

<h1>VarHandle creation</h1> Código Java puede crear un varHandle que acceda directamente a cualquier campo al que se pueda acceder a ese código. Esto se hace a través de una API reflectante basada en funcionalidad denominada java.lang.invoke.MethodHandles.Lookup MethodHandles.Lookup. Por ejemplo, un VarHandle para un campo no estático se puede obtener de java.lang.invoke.MethodHandles.Lookup#findVarHandle Lookup.findVarHandle. También hay un método de conversión de objetos core Reflection API, java.lang.invoke.MethodHandles.Lookup#unreflectVarHandle Lookup.unreflectVarHandle.

El acceso a los miembros del campo protegido está restringido solo a los receptores de la clase de acceso, o a una de sus subclases, y la clase de acceso debe ser, a su vez, una subclase (o elemento relacionado del paquete) de la clase de definición del miembro protegido. Si varHandle hace referencia a un campo no estático protegido de una clase declarante fuera del paquete actual, el argumento receptor se restringirá al tipo de la clase de acceso.

<h1>Interoperation between VarHandles and the Core Reflection API/h1> Using factory methods in the java.lang.invoke.MethodHandles.Lookup Lookup API<, any field represent by a Core Reflection API object can be converted to a conductly equivalente VarHandle. Por ejemplo, un reflectante java.lang.reflect.Field Field se puede convertir en varHandle mediante java.lang.invoke.MethodHandles.Lookup#unreflectVarHandle Lookup.unreflectVarHandle. Los VarHandles resultantes suelen proporcionar acceso más directo y eficaz a los campos subyacentes.

Como caso especial, cuando core Reflection API se usa para ver los métodos de modo de acceso polimórfico de firma en esta clase, aparecen como métodos no polimórficos normales. Su apariencia reflectante, tal como la ve java.lang.Class#getDeclaredMethod Class.getDeclaredMethod, no se ve afectada por su estado especial en esta API. Por ejemplo, java.lang.reflect.Method#getModifiers Method.getModifiers notificará exactamente esos bits modificadores necesarios para cualquier método declarado de forma similar, incluidos en este caso native y varargs bits.

Al igual que con cualquier método reflejado, estos métodos (cuando se reflejan) se pueden invocar directamente a través java.lang.reflect.Method#invoke java.lang.reflect.Method.invokede , a través de JNI o indirectamente a través de java.lang.invoke.MethodHandles.Lookup#unreflect Lookup.unreflect. Sin embargo, estas llamadas reflectantes no dan lugar a invocaciones de método de modo de acceso. Esta llamada, si se pasa el argumento necesario (uno único, de tipo Object[]), omitirá el argumento y producirá una UnsupportedOperationExceptionexcepción .

Dado que invokevirtual las instrucciones pueden invocar de forma nativa métodos de modo de acceso VarHandle en cualquier descriptor de tipo simbólico, esta vista reflectante entra en conflicto con la presentación normal de estos métodos a través de códigos de bytes. Por lo tanto, estos métodos nativos, cuando se ven de forma reflexiva por Class.getDeclaredMethod, solo pueden considerarse marcadores de posición.

Para obtener un método de invocador para un tipo de modo de acceso determinado, use java.lang.invoke.MethodHandles#varHandleExactInvoker o java.lang.invoke.MethodHandles#varHandleInvoker. La java.lang.invoke.MethodHandles.Lookup#findVirtual Lookup.findVirtual API también puede devolver un identificador de método para llamar a un método de modo de acceso para cualquier tipo de modo de acceso especificado y es equivalente en comportamiento a java.lang.invoke.MethodHandles#varHandleInvoker.

<h1>Interoperación entre VarHandles y Java generics/h1> A VarHandle se puede obtener para una variable, como un campo, que se declara con tipos genéricos< de Java. Al igual que con Core Reflection API, el tipo de variable varHandle se construirá a partir de la eliminación del tipo de nivel de origen. Cuando se invoca un método de modo de acceso VarHandle, los tipos de sus argumentos o el tipo de conversión de valor devuelto pueden ser tipos genéricos o instancias de tipo. Si esto ocurre, el compilador reemplazará esos tipos por sus borrados cuando construya el descriptor de tipo simbólico para la invokevirtual instrucción.

Agregado en 9.

Documentación de Java para java.lang.invoke.VarHandle.

Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el proyecto de código abierto de Android y se usan según los términos descritos en la licencia de atribución de Creative Commons 2.5.

Constructores

VarHandle(IntPtr, JniHandleOwnership)

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

Propiedades

Class

Devuelve la clase en tiempo de ejecución de este Objectobjeto .

(Heredado de Object)
Handle

Identificador de la instancia de Android subyacente.

(Heredado de Object)
JniIdentityHashCode

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

(Heredado de Object)
JniPeerMembers

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

PeerReference

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

(Heredado de Object)
ThresholdClass

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

ThresholdType

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

Métodos

AccessModeType(VarHandle+AccessMode)

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

AcquireFence()

Garantiza que las cargas antes de la valla no se reordenarán con cargas y almacenes después de la valla.

Clone()

Crea y devuelve una copia de este objeto.

(Heredado de Object)
CompareAndExchange(Object[])

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

CompareAndExchangeAcquire(Object[])

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

CompareAndExchangeRelease(Object[])

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

CompareAndSet(Object[])

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

CoordinateTypes()

Devuelve los tipos de coordenadas de este VarHandle.

Dispose()

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

(Heredado de Object)
Dispose(Boolean)

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

(Heredado de Object)
Equals(Object)

Indica si algún otro objeto es "igual a" este.

(Heredado de Object)
FullFence()

Garantiza que las cargas y almacenes antes de la valla no se reordenarán con cargas y almacenes después de la valla.

Get(Object[])

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

GetAcquire(Object[])

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

GetAndAdd(Object[])

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

GetAndAddAcquire(Object[])

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

GetAndAddRelease(Object[])

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

GetAndBitwiseAnd(Object[])

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

GetAndBitwiseAndAcquire(Object[])

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

GetAndBitwiseAndRelease(Object[])

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

GetAndBitwiseOr(Object[])

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

GetAndBitwiseOrAcquire(Object[])

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

GetAndBitwiseOrRelease(Object[])

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

GetAndBitwiseXor(Object[])

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

GetAndBitwiseXorAcquire(Object[])

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

GetAndBitwiseXorRelease(Object[])

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

GetAndSet(Object[])

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

GetAndSetAcquire(Object[])

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

GetAndSetRelease(Object[])

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

GetHashCode()

Devuelve un valor de código hash del objeto.

(Heredado de Object)
GetOpaque(Object[])

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

GetVolatile(Object[])

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

IsAccessModeSupported(VarHandle+AccessMode)

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

JavaFinalize()

Lo llama el recolector de elementos no utilizados en un objeto cuando la recolección de elementos no utilizados determina que no hay más referencias al objeto .

(Heredado de Object)
LoadLoadFence()

Garantiza que las cargas antes de la valla no se reordenarán con cargas después de la valla.

Notify()

Activa un único subproceso que está esperando en el monitor de este objeto.

(Heredado de Object)
NotifyAll()

Activa todos los subprocesos que están esperando en el monitor de este objeto.

(Heredado de Object)
ReleaseFence()

Garantiza que las cargas y almacenes antes de la valla no se reordenarán con almacenes después de la valla.

Set(Object[])

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

SetHandle(IntPtr, JniHandleOwnership)

Establece la propiedad Handle.

(Heredado de Object)
SetOpaque(Object[])

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

SetRelease(Object[])

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

SetVolatile(Object[])

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

StoreStoreFence()

Garantiza que las tiendas antes de la valla no se reordenarán con tiendas después de la valla.

ToArray<T>()

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

(Heredado de Object)
ToMethodHandle(VarHandle+AccessMode)

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

ToString()

Devuelve una representación de cadena del objeto.

(Heredado de Object)
UnregisterFromRuntime()

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

(Heredado de Object)
VarType()

Devuelve el tipo de variable de variables a las que hace referencia este VarHandle.

Wait()

Hace que el subproceso actual espere hasta que se despierta, normalmente por ser em notificado/em> o <em>interrumpido</em>.<><

(Heredado de Object)
Wait(Int64)

Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <em>notificado</em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real.

(Heredado de Object)
Wait(Int64, Int32)

Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <em>notificado</em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real.

(Heredado de Object)
WeakCompareAndSet(Object[])

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

WeakCompareAndSetAcquire(Object[])

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

WeakCompareAndSetPlain(Object[])

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

WeakCompareAndSetRelease(Object[])

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

Implementaciones de interfaz explícitas

IJavaPeerable.Disposed()

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

(Heredado de Object)
IJavaPeerable.DisposeUnlessReferenced()

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

(Heredado de Object)
IJavaPeerable.Finalized()

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

(Heredado de Object)
IJavaPeerable.JniManagedPeerState

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

(Heredado de Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

(Heredado de Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

(Heredado de Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

(Heredado de Object)

Métodos de extensión

JavaCast<TResult>(IJavaObject)

Realiza una conversión de tipos comprobados en tiempo de ejecución de Android.

JavaCast<TResult>(IJavaObject)

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

GetJniTypeName(IJavaPeerable)

VarHandle es una referencia fuertemente tipada dinámicamente a una variable o a una familia de variables definida de forma paramétrica, incluidos campos estáticos, campos no estáticos, elementos de matriz o componentes de una estructura de datos fuera del montón.

Se aplica a