VarHandle Classe

Definição

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do 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
Herança
Atributos

Comentários

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap. O acesso a essas variáveis tem suporte em vários <>modos< de acesso em>, incluindo acesso de leitura/gravação sem formatação, acesso volátil de leitura/gravação e comparação e conjunto.

VarHandles são imutáveis e não têm estado visível. VarHandles não pode ser subclasse pelo usuário.

Um VarHandle tem: <ul><li>a #varType variable type T, o tipo de cada variável referenciada por este VarHandle; e <li>uma lista de#coordinateTypes coordinate typesCT1, CT2, ..., CTn tipos de expressões de <>coordenadas< em que localiza conjuntamente> uma variável referenciada por este VarHandle. </ul> Os tipos de variável e coordenada podem ser primitivos ou de referência e são representados por Class objetos. A lista de tipos de coordenadas pode estar vazia.

Métodos de fábrica que produzem ou java.lang.invoke.MethodHandles.Lookup lookup instâncias VarHandle documentam o tipo de variável com suporte e a lista de tipos de coordenadas.

Cada modo de acesso é associado a um <>método</em> modo de acesso, um método polimórfico de assinatura nomeado para o modo de acesso. Quando um método de modo de acesso é invocado em uma instância varHandle, os argumentos iniciais para a invocação são expressões de coordenadas que indicam precisamente em qual objeto a variável deve ser acessada. Argumentos à direita para a invocação representam valores de importância para o modo de acesso. Por exemplo, os vários modos de acesso compare-and-set ou compare-and-exchange exigem dois argumentos à direita para o valor esperado da variável e o novo valor.

A aridade e os tipos de argumentos para a invocação de um método de modo de acesso não são verificados estaticamente. Em vez disso, cada método de modo de acesso especifica um #accessModeType(AccessMode) access mode type, representado como uma instância de MethodType, que serve como um tipo de assinatura de método em relação ao qual os argumentos são verificados dinamicamente. Um tipo de modo de acesso fornece tipos de parâmetro formais em termos dos tipos de coordenadas de uma instância varHandle e os tipos de valores de importância para o modo de acesso. Um tipo de modo de acesso também fornece um tipo de retorno, geralmente em termos do tipo variável de uma instância varHandle. Quando um método de modo de acesso é invocado em uma instância varHandle, o descritor de tipo simbólico no site de chamada, os tipos de tempo de execução de argumentos para a invocação e o tipo de tempo de execução do valor retornado devem corresponder aos tipos fornecidos no tipo de modo de acesso. Uma exceção de runtime será gerada se a correspondência falhar.

Por exemplo, o método #compareAndSet de modo de acesso especifica que, se o receptor for uma instância varHandle com tipos CT1, ..., CTn de coordenadas e tipo Tde variável, seu tipo de modo de acesso será (CT1 c1, ..., CTn cn, T expectedValue, T newValue)boolean. Suponha que uma instância varHandle possa acessar elementos de matriz e que seus tipos de coordenadas sejam String[] e int enquanto seu tipo de variável for String. O tipo de modo de acesso para compareAndSet essa instância varHandle seria (String[] c1, int c2, String expectedValue, String newValue)boolean. Essa instância varHandle pode ser produzida pelos elementos de matriz de acesso e da MethodHandles#arrayElementVarHandle(Class) array factory method seguinte maneira:

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

Os modos de acesso controlam as propriedades de atomicidade e consistência. < > <Os acessos de leitura (>) e gravação (getset) sem formatação têm a garantia de serem atômicos bit a bit apenas para referências e valores primitivos de no máximo 32 bits e não impõem restrições de ordenação observáveis em relação a threads diferentes do thread em execução. <As operações em>Opaco</em> são atômicas bit a bit e ordenadas coerentemente em relação aos acessos à mesma variável. Além de obedecer às propriedades opacas, <em>leituras de modo Acquire</em> e seus acessos subsequentes são ordenados após a correspondência <em>gravações de modo Release</em> e seus acessos anteriores. Além de obedecer às propriedades Acquire e Release, todas as <operações em>Volatile</em> são totalmente ordenadas em relação umas às outras.

Os modos de acesso são agrupados nas seguintes categorias: <modos de acesso de leitura ul><li>que obtêm o valor de uma variável em efeitos de ordenação de memória especificados. O conjunto de métodos de modo de acesso correspondentes pertencentes a esse grupo consiste nos métodos #get get, #getVolatile getVolatile, , #getAcquire getAcquire#getOpaque getOpaque. <li>gravar modos de acesso que definem o valor de uma variável sob efeitos de ordenação de memória especificados. O conjunto de métodos de modo de acesso correspondentes pertencentes a esse grupo consiste nos métodos #set set, #setVolatile setVolatile, , #setRelease setRelease#setOpaque setOpaque. <li>atomic update access modes that, por exemplo, atomically compare and set the value of a variable under specified memory ordering effects. O conjunto de métodos de modo de acesso correspondentes pertencentes a esse grupo consiste nos métodos , , , , #compareAndSet compareAndSet, #weakCompareAndSetPlain weakCompareAndSetPlain, #weakCompareAndSet weakCompareAndSet, #weakCompareAndSetAcquire weakCompareAndSetAcquire, #weakCompareAndSetRelease weakCompareAndSetRelease, #compareAndExchangeAcquire compareAndExchangeAcquire, , #compareAndExchange compareAndExchange, #compareAndExchangeRelease compareAndExchangeRelease. #getAndSet getAndSet#getAndSetAcquire getAndSetAcquire#getAndSetRelease getAndSetRelease <li>numeric atomic update access modes that, por exemplo, atomically get and set with addition the value of a variable under specified memory ordering effects. O conjunto de métodos de modo de acesso correspondentes pertencentes a esse grupo consiste nos métodos#getAndAdd getAndAdd, #getAndAddAcquire getAndAddAcquire, #getAndAddRelease getAndAddRelease<modos de acesso de atualização atômica li>bit a bit que, por exemplo, obtém atomicamente e bit a bit OU o valor de uma variável sob efeitos de ordenação de memória especificados. O conjunto de métodos de modo de acesso correspondentes pertencentes a esse grupo consiste nos métodos #getAndBitwiseOr getAndBitwiseOr, #getAndBitwiseOrAcquire getAndBitwiseOrAcquire, #getAndBitwiseOrRelease getAndBitwiseOrRelease, , #getAndBitwiseAnd getAndBitwiseAnd, #getAndBitwiseAndAcquire getAndBitwiseAndAcquire, #getAndBitwiseAndRelease getAndBitwiseAndRelease, #getAndBitwiseXor getAndBitwiseXor, #getAndBitwiseXorAcquire getAndBitwiseXorAcquire, . #getAndBitwiseXorRelease getAndBitwiseXorRelease </ul>

Métodos de fábrica que produzem ou java.lang.invoke.MethodHandles.Lookup lookup instâncias VarHandle documentam o conjunto de modos de acesso com suporte, que também pode incluir restrições de documentação com base no tipo de variável e se uma variável é somente leitura. Se não houver suporte para um modo de acesso, o método de modo de acesso correspondente na invocação gerará um UnsupportedOperationException. Os métodos de fábrica devem documentar quaisquer exceções não declaradas adicionais que possam ser geradas por métodos de modo de acesso. O #get get modo de acesso tem suporte para todas as instâncias do VarHandle e o método correspondente nunca é gerado UnsupportedOperationException. Se um VarHandle fizer referência a uma variável somente leitura (por exemplo, um final campo), não há suporte para gravação, atualização atômica, atualização atômica numérica e modos de acesso de atualização atômica bit a bit e métodos correspondentes UnsupportedOperationException. Os modos de acesso de leitura/gravação (se houver suporte), com exceção de get e set, fornecem acesso atômico para tipos de referência e todos os tipos primitivos. A menos que indicado de outra forma na documentação de um método de fábrica, os modos get de acesso e set (se houver suporte) fornecem acesso atômico para tipos de referência e todos os tipos primitivos, com exceção de plataformas de longdouble 32 bits.

Os modos de acesso substituirão quaisquer efeitos de ordenação de memória especificados no site de declaração de uma variável. Por exemplo, um VarHandle que acessa um campo usando o get modo de acesso acessará o campo conforme especificado <>por seu modo< de acesso/em> mesmo se esse campo for declaradovolatile. Quando o acesso misto é realizado, deve-se tomar cuidados extremos, pois o modelo de memória Java pode permitir resultados surpreendentes.

Além de dar suporte ao acesso a variáveis em vários modos de acesso, um conjunto de métodos estáticos, conhecidos como métodos de cerca de memória, também é fornecido para o controle refinado da ordenação de memória.

O Java Especificação de Linguagem permite que outros threads observem operações como se fossem executadas em ordens diferentes das aparentes no código-fonte do programa, sujeitas a restrições decorrentes, por exemplo, do uso de bloqueios, volatile campos ou VarHandles. Os métodos estáticos, #fullFence fullFence, #acquireFence acquireFence, #releaseFence releaseFence#loadLoadFence loadLoadFencee #storeStoreFence storeStoreFence, também podem ser usados para impor restrições. Suas especificações, como é o caso de determinados modos de acesso, são formuladas em termos de falta de "reordenações" – efeitos de ordenação observáveis que poderiam ocorrer de outra forma se a cerca não estivesse presente. Frases mais precisas da especificação de métodos de modo de acesso e métodos de cerca de memória podem acompanhar atualizações futuras do Java Language Specification.

<h1>Compilar invocação de métodos< de modo de acesso/h1> Uma expressão de chamada de método Java nomeando um método de modo de acesso pode invocar um VarHandle de Java código-fonte. Do ponto de vista do código-fonte, esses métodos podem usar qualquer argumento e seu resultado polimórfico (se expresso) pode ser convertido em qualquer tipo de retorno. Formalmente, isso é feito fornecendo aos métodos de modo de acesso argumentos de aridade Object variáveis e Object tipos de retorno (se o tipo de retorno for polimórfico), mas eles têm uma qualidade adicional chamada <em>polimorfismo</em> assinatura que conecta essa liberdade de invocação diretamente à pilha de execução JVM.

Como é de costume com métodos virtuais, as chamadas no nível do código-fonte para métodos de modo de acesso são compiladas para uma instrução invokevirtual . Mais incomum, o compilador deve gravar os tipos de argumento reais e pode não executar conversões de invocação de método nos argumentos. Em vez disso, ele deve gerar instruções para efetuar push deles na pilha de acordo com seus próprios tipos não convertidos. O objeto VarHandle em si será enviado por push na pilha antes dos argumentos. Em seguida, o compilador gera uma instrução invokevirtual que invoca o método de modo de acesso com um descritor de tipo simbólico que descreve o argumento e os tipos de retorno.

Para emitir um descritor de tipo simbólico completo, o compilador também deve determinar o tipo de retorno (se polimórfico). Isso se baseia em uma conversão na expressão de invocação do método, se houver uma ou se Object a invocação for uma expressão ou se void a invocação for uma instrução. A conversão pode ser de um tipo primitivo (mas não void).

Como uma caixa de canto, um argumento não moldado null recebe um descritor de tipo simbólico de java.lang.Void. A ambiguidade com o tipo Void é inofensiva, pois não há referências de tipo Void , exceto a referência nula.

<h1>"invoke">Executando invocação de métodos< de modo de acesso/h1> A primeira vez que uma invokevirtual instrução é executada, ela é vinculada resolvendo simbolicamente os nomes na instrução e verificando se a chamada de método é estaticamente legal. Isso também vale para chamadas para métodos de modo de acesso. Nesse caso, o descritor de tipo simbólico emitido pelo compilador é verificado quanto à sintaxe correta e os nomes que ele contém são resolvidos. Portanto, uma instrução invokevirtual que invoca um método de modo de acesso sempre será vinculada, desde que o descritor de tipo simbólico seja sintaticamente bem formado e os tipos existam.

Quando ele invokevirtual é executado após a vinculação, o tipo de modo de acesso do VarHandle de recebimento é verificado pela primeira vez pela JVM para garantir que ele corresponda ao descritor de tipo simbólico. Se a correspondência de tipo falhar, isso significa que o método de modo de acesso que o chamador está invocando não está presente no VarHandle individual que está sendo invocado.

A invocação de um método de modo de acesso se comporta como se fosse uma invocação de MethodHandle#invoke, em que o identificador do método de recebimento aceita a instância varHandle como o argumento principal. Mais especificamente, o seguinte, em que {access-mode} corresponde ao nome do método do modo de acesso:

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

se comporta como 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)
            }

(métodos de modo de acesso de modulo não declaram o lançamento de Throwable). Isso é equivalente 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)
            }

em que o tipo de método desejado é o descritor de tipo simbólico e um MethodHandle#invokeExact é executado, uma vez que antes da invocação do destino, o identificador aplicará conversões de referência conforme necessário e caixa, unbox ou ampliação de valores primitivos, como se por MethodHandle#asType asType (veja também MethodHandles#varHandleInvoker).

Mais concisamente, esse comportamento é 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)
            }

Quando, nesse caso, o identificador de método está associado à instância varHandle.

<h1>Verificação de invocação</h1> Em programas típicos, a correspondência de tipos de modo de acesso VarHandle geralmente terá êxito. Mas se uma correspondência falhar, a JVM lançará um WrongMethodTypeException.

Assim, uma incompatibilidade de tipo de modo de acesso que pode aparecer como um erro de vinculação em um programa tipado estaticamente pode aparecer como uma dinâmica WrongMethodTypeException em um programa que usa VarHandles.

Como os tipos de modo de acesso contêm objetos "dinâmicos Class ", a correspondência de tipos de método leva em conta nomes de tipo e carregadores de classe. Portanto, mesmo que um VarHandle VH seja criado em um carregador L1 de classe e usado em outro L2, as chamadas de método de modo de acesso VarHandle são de tipo seguro, porque o descritor de tipo simbólico do chamador, conforme resolvido, L2é correspondido com o descritor de tipo simbólico do método chamado original, conforme resolvido em L1. A resolução L1 ocorre quando VH é criada e seus tipos de modo de acesso são atribuídos, enquanto a resolução L2 ocorre quando a invokevirtual instrução é vinculada.

Além das verificações de descritor de tipo, a funcionalidade de um VarHandles para acessar suas variáveis é irrestrita. Se um VarHandle for formado em uma variável não pública por uma classe que tenha acesso a essa variável, o VarHandle resultante poderá ser usado em qualquer lugar por qualquer chamador que receba uma referência a ela.

Ao contrário da API de Reflexão Principal, em que o acesso é verificado sempre que um método reflexivo é invocado, a verificação de acesso varHandle é executada quando o VarHandle é criado. Assim, VarHandles para variáveis não públicas, ou para variáveis em classes não públicas, geralmente deve ser mantido em segredo. Eles não devem ser passados para código não confiável, a menos que seu uso do código não confiável seja inofensivo.

<h1>VarHandle creation</h1> Java code can create a VarHandle that directly accesses any field that is accessible to that code. Isso é feito por meio de uma API reflexiva baseada em funcionalidade chamada java.lang.invoke.MethodHandles.Lookup MethodHandles.Lookup. Por exemplo, um VarHandle para um campo não estático pode ser obtido de java.lang.invoke.MethodHandles.Lookup#findVarHandle Lookup.findVarHandle. Há também um método de conversão de objetos da API core reflection, java.lang.invoke.MethodHandles.Lookup#unreflectVarHandle Lookup.unreflectVarHandle.

O acesso aos membros do campo protegido é restrito apenas aos receptores da classe de acesso ou a uma de suas subclasses, e a classe de acesso, por sua vez, deve ser uma subclasse (ou irmão do pacote) da classe de definição do membro protegido. Se um VarHandle se referir a um campo não estático protegido de uma classe de declaração fora do pacote atual, o argumento receptor será restringido ao tipo da classe de acesso.

<h1>Interoperação entre VarHandles e a API< de Reflexão Principal/h1 Usando métodos de> fábrica na java.lang.invoke.MethodHandles.Lookup Lookup API, qualquer campo representado por um objeto da API de Reflexão Principal pode ser convertido em um VarHandle comportamentalmente equivalente. Por exemplo, um reflexivo java.lang.reflect.Field Field pode ser convertido em um VarHandle usando java.lang.invoke.MethodHandles.Lookup#unreflectVarHandle Lookup.unreflectVarHandle. Os VarHandles resultantes geralmente fornecem acesso mais direto e eficiente aos campos subjacentes.

Como um caso especial, quando a API de Reflexão Principal é usada para exibir os métodos de modo de acesso polimórfico de assinatura nessa classe, eles aparecem como métodos não polimórficos comuns. Sua aparência reflexiva, como visto por java.lang.Class#getDeclaredMethod Class.getDeclaredMethod, não é afetada pelo status especial nesta API. Por exemplo, java.lang.reflect.Method#getModifiers Method.getModifiers relatará exatamente esses bits modificador necessários para qualquer método declarado da mesma forma, incluindo neste caso native e varargs bits.

Assim como acontece com qualquer método refletido, esses métodos (quando refletidos) podem ser invocados diretamente via java.lang.reflect.Method#invoke java.lang.reflect.Method.invoke, via JNI ou indiretamente via java.lang.invoke.MethodHandles.Lookup#unreflect Lookup.unreflect. No entanto, essas chamadas reflexivas não resultam em invocações de método de modo de acesso. Tal chamada, se aprovada o argumento necessário (um único, do tipo Object[]), ignorará o argumento e lançará um UnsupportedOperationException.

Como invokevirtual as instruções podem invocar nativamente métodos de modo de acesso VarHandle em qualquer descritor de tipo simbólico, essa exibição reflexiva entra em conflito com a apresentação normal desses métodos por meio de códigos de byte. Assim, esses métodos nativos, quando exibidos reflexivamente por Class.getDeclaredMethod, podem ser considerados apenas como espaços reservados.

Para obter um método de invocador para um tipo de modo de acesso específico, use java.lang.invoke.MethodHandles#varHandleExactInvoker ou java.lang.invoke.MethodHandles#varHandleInvoker. A java.lang.invoke.MethodHandles.Lookup#findVirtual Lookup.findVirtual API também é capaz de retornar um identificador de método para chamar um método de modo de acesso para qualquer tipo de modo de acesso especificado e é equivalente no comportamento para java.lang.invoke.MethodHandles#varHandleInvoker.

<h1>Interoperação entre VarHandles e Java generics</h1> A VarHandle pode ser obtida para uma variável, como um campo, que é declarado com Java tipos genéricos. Assim como acontece com a API de Reflexão Principal, o tipo de variável do VarHandle será construído a partir da eliminação do tipo de nível de origem. Quando um método de modo de acesso VarHandle é invocado, os tipos de seus argumentos ou o tipo de conversão de valor retornado podem ser tipos genéricos ou instâncias de tipo. Se isso ocorrer, o compilador substituirá esses tipos por suas eliminações quando construir o descritor de tipo simbólico para a invokevirtual instrução.

Adicionado em 9.

Java documentação para java.lang.invoke.VarHandle.

Partes desta página são modificações baseadas no trabalho criado e compartilhado pelo Project Open Source do Open Source e usadas de acordo com os termos descritos na Creative Commons 2.5.

Construtores

Nome Description
VarHandle(IntPtr, JniHandleOwnership)

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

Propriedades

Nome Description
Class

Retorna a classe de runtime deste Object.

(Herdado de Object)
Handle

O identificador para a instância subjacente do Android.

(Herdado de Object)
JniIdentityHashCode

Obtém o código de hash de identidade atribuído a esse par Java pelo runtime de interoperabilidade.

(Herdado de Object)
JniManagedPeerState

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

(Herdado de JavaObject)
JniPeerMembers

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

PeerReference

Obtém a referência de objeto JNI para este par Java.

(Herdado de Object)
ThresholdClass

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

ThresholdType

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

Métodos

Nome Description
AccessModeType(VarHandle+AccessMode)

Obtém o tipo de modo de acesso para esse VarHandle e o modo de acesso especificado.

AcquireFence()

Garante que as cargas antes da cerca não serão reordenadas com cargas e repositórios após a cerca.

Clone()

Cria e retorna uma cópia desse objeto.

(Herdado de Object)
CompareAndExchange(Object[])

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

CompareAndExchangeAcquire(Object[])

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

CompareAndExchangeRelease(Object[])

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

CompareAndSet(Object[])

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

Construct(JniObjectReference, JniObjectReferenceOptions)

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

(Herdado de JavaObject)
CoordinateTypes()

Retorna os tipos de coordenadas para este VarHandle.

Dispose()

Libera os recursos mantidos por esse par Java.

(Herdado de Object)
Dispose(Boolean)

Libera os recursos mantidos por esse par Java.

(Herdado de Object)
DisposeUnlessReferenced()

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

(Herdado de JavaObject)
Equals(Object)

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

(Herdado de JavaObject)
Equals(Object)

Indica se algum outro objeto é "igual a" este.

(Herdado de Object)
FullFence()

Garante que as cargas e repositórios antes da cerca não serão reordenadas com cargas e repositórios após a cerca.

Get(Object[])

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

GetAcquire(Object[])

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

GetAndAdd(Object[])

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

GetAndAddAcquire(Object[])

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

GetAndAddRelease(Object[])

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

GetAndBitwiseAnd(Object[])

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

GetAndBitwiseAndAcquire(Object[])

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

GetAndBitwiseAndRelease(Object[])

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

GetAndBitwiseOr(Object[])

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

GetAndBitwiseOrAcquire(Object[])

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

GetAndBitwiseOrRelease(Object[])

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

GetAndBitwiseXor(Object[])

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

GetAndBitwiseXorAcquire(Object[])

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

GetAndBitwiseXorRelease(Object[])

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

GetAndSet(Object[])

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

GetAndSetAcquire(Object[])

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

GetAndSetRelease(Object[])

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

GetHashCode()

Retorna um valor de código hash para o objeto.

(Herdado de Object)
GetOpaque(Object[])

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

GetVolatile(Object[])

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

IsAccessModeSupported(VarHandle+AccessMode)

Determina se o modo de acesso especificado tem suporte neste VarHandle.

JavaFinalize()

Chamado pelo coletor de lixo em um objeto quando a coleta de lixo determina que não há mais referências ao objeto.

(Herdado de Object)
LoadLoadFence()

Garante que as cargas antes da cerca não serão reordenadas com cargas após a cerca.

Notify()

Ativa um único thread que está aguardando no monitor deste objeto.

(Herdado de Object)
NotifyAll()

Ativa todos os threads que estão aguardando no monitor deste objeto.

(Herdado de Object)
ReleaseFence()

Garante que cargas e repositórios antes da cerca não serão reordenados com lojas após a cerca.

Set(Object[])

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

SetHandle(IntPtr, JniHandleOwnership)

Define a propriedade Handle

(Herdado de Object)
SetOpaque(Object[])

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

(Herdado de JavaObject)
SetRelease(Object[])

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

SetVolatile(Object[])

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

StoreStoreFence()

Garante que as lojas antes da cerca não serão reordenadas com lojas após a cerca.

ToArray<T>()

Cria uma matriz gerenciada com base nesse wrapper de matriz Java.

(Herdado de Object)
ToMethodHandle(VarHandle+AccessMode)

Obtém um identificador de método associado a isso VarHandle e ao modo de acesso especificado.

ToString()

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

ToString()

Retorna uma representação de cadeia de caracteres do objeto.

(Herdado de Object)
UnregisterFromRuntime()

Cancela o registro desse par Java do runtime de interoperabilidade.

(Herdado de Object)
VarType()

Retorna o tipo variável de variáveis referenciadas por este VarHandle.

Wait()

Faz com que o thread atual aguarde até ser despertado, normalmente por ser <notificado/em> ou <em>interrompido</em>.<>

(Herdado de Object)
Wait(Int64, Int32)

Faz com que o thread atual aguarde até que ele seja despertado, normalmente por ser <>notificado</em> ou <em>interrompido</em>, ou até que uma determinada quantidade de tempo real tenha decorrido.

(Herdado de Object)
Wait(Int64)

Faz com que o thread atual aguarde até que ele seja despertado, normalmente por ser <>notificado</em> ou <em>interrompido</em>, ou até que uma determinada quantidade de tempo real tenha decorrido.

(Herdado de Object)
WeakCompareAndSet(Object[])

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

WeakCompareAndSetAcquire(Object[])

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

WeakCompareAndSetPlain(Object[])

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

WeakCompareAndSetRelease(Object[])

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

Implantações explícitas de interface

Nome Description
IJavaPeerable.Disposed()

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

(Herdado de JavaObject)
IJavaPeerable.Finalized()

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

(Herdado de JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

(Herdado de JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

(Herdado de JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

(Herdado de JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

(Herdado de JavaObject)

Métodos de Extensão

Nome Description
GetJniTypeName(IJavaPeerable)

Obtém o nome JNI do tipo da instância self.

JavaAs<TResult>(IJavaPeerable)

Tente coagir a digitar selfTResult, verificando se a coerção é válida no lado Java.

JavaCast<TResult>(IJavaObject)

Executa uma conversão de tipo marcada por runtime do Android.

JavaCast<TResult>(IJavaObject)

Um VarHandle é uma referência dinamicamente fortemente tipada a uma variável ou a uma família de variáveis definida parametricamente, incluindo campos estáticos, campos não estáticos, elementos de matriz ou componentes de uma estrutura de dados fora do heap.

TryJavaCast<TResult>(IJavaPeerable, TResult)

Tente coagir a digitar selfTResult, verificando se a coerção é válida no lado Java.

Aplica-se a