Idioma

IMethodHandleInfo Interface

Definição

Uma referência simbólica obtida pela quebra de um identificador de método direto em suas partes simbólicas consitutent.

[Android.Runtime.Register("java/lang/invoke/MethodHandleInfo", "", "Java.Lang.Invoke.IMethodHandleInfoInvoker", ApiSince=26)]
public interface IMethodHandleInfo : Android.Runtime.IJavaObject, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("java/lang/invoke/MethodHandleInfo", "", "Java.Lang.Invoke.IMethodHandleInfoInvoker", ApiSince=26)>]
type IMethodHandleInfo = interface
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
Atributos
Implementações

Comentários

Uma referência simbólica obtida pela quebra de um identificador de método direto em suas partes simbólicas consitutent. Para quebrar um identificador de método direto, chame Lookup#revealDirect Lookup.revealDirect. <h1>"directmh">Direct Method Handles</h1> A <em>direct method handle</em> represents a method, constructor, or field without any intervening argument bindings or other transformations. O método, construtor ou campo referenciado por um identificador de método direto é chamado de <>membro</em> subjacente. Os identificadores de método direto podem ser obtidos de qualquer uma dessas maneiras: <ul><li>Executando uma instrução ldc em uma CONSTANT_MethodHandle constante. (Consulte o Java Especificação da Máquina Virtual, seções 4.4.8 e 5.4.3.) <li>Chamando um dos Métodos de Fábrica de Pesquisa, comoLookup#findVirtual Lookup.findVirtual, para resolver uma referência simbólica em um identificador de método. Uma referência simbólica consiste em uma classe, uma cadeia de caracteres de nome e um tipo. <li>Chamando o método Lookup#unreflect Lookup.unreflect de fábrica ou Lookup#unreflectSpecial Lookup.unreflectSpecial convertendo um Method em um identificador de método. <li>Chamando o método Lookup#unreflectConstructor Lookup.unreflectConstructor de fábrica para converter um Constructor em um identificador de método. <li>Chamando o método Lookup#unreflectGetter Lookup.unreflectGetter de fábrica ou Lookup#unreflectSetter Lookup.unreflectSetter convertendo um Field em um identificador de método. </ul>

<h1>Restrições em Cracking</h1> Dado um objeto adequado Lookup , é possível quebrar qualquer identificador de método direto para recuperar uma referência simbólica para o método, construtor ou campo subjacente. A quebra deve ser feita por meio de um Lookup objeto equivalente ao que criou o identificador do método de destino ou que tenha permissões de acesso suficientes para recriar um identificador de método equivalente.

Se o método subjacente for sensível ao chamador, o identificador de método direto terá sido "associado" a uma determinada classe de chamador, a classe de pesquisa java.lang.invoke.MethodHandles.Lookup#lookupClass() do objeto de pesquisa usado para criá-lo. A quebra desse identificador de método com uma classe de pesquisa diferente falhará mesmo que o método subjacente seja público (como Class.forName).

O requisito de correspondência de objeto de pesquisa fornece um comportamento de "falha rápida" para programas que, de outra forma, podem confiar na revelação errônea de um identificador de método com informações simbólicas (ou associação de chamador) de um escopo inesperado. Use java.lang.invoke.MethodHandles#reflectAs para substituir essa limitação.

<h1>"refkinds">Tipos de referência</h1 Os métodos de fábrica de> pesquisa correspondem a todos os casos de uso principais para métodos, construtores e campos. Esses casos de uso podem ser diferenciados usando pequenos inteiros da seguinte maneira: <table border=1 cellpadding=5 summary="reference kinds"><tr><th>reference kind</th th><>descriptive name</th th><>scope</th th><>member</th th><th>behavior</th></tr><tr><td>1</td td><>REF_getField</td td><>class</td td/td><td>FT f;</td td><>(T) this.f;</td></tr><tr><td>2</td td><>REF_getStatic</td td><>class ou interface</td td><>static<br>FT f;</td td><>(T) C.f;</td/td></tr><td><>3</td td><>REF_putField</td><td>class<><>FT f;</td td><>this.f = x;/td</td></tr tr><td><>/td4td<><>/td tdREF_putStatic<><>/td tdclass<><>brstatic<>/td tdFT f;<><>/tdC.f = arg;</tr><tr><td><>/td td5<><>/td tdREF_invokeVirtual<><>/tdclass<td><>/td tdT m(A*);<><>/td(T) this.m(arg*);</tr tr><><td><>/td6td<><>/td tdREF_invokeStatic<>< ou >class/tdinterface<td><>brstatic<>/td tdT m(A*);<><>/td(T) C.m(arg*);</tr><tr><td><>/td td7<><>/td tdREF_invokeSpecial<>< ou >class/td tdinterface<><>/td tdT m(A*);<><>/td(T) super.m(arg*);</tr ><><tr><td>8</td><td>REF_newInvokeSpecial</td><>class</td td><>C(A*);</td td><>new C(arg*);/td</td></tr><tr><td>9</td td><>REF_invokeInterface</td td><>interface</td><td>T m(A*);</td><>(T) this.m(arg*);</td></tr></table>

Adicionado em 1.8.

Documentação Java para java.lang.invoke.MethodHandleInfo.

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

Propriedades

Nome Description
DeclaringClass

Retorna a classe na qual o membro subjacente do identificador do método rachado foi definido.

Handle

Obtém o valor JNI do objeto Android subjacente.

(Herdado de IJavaObject)
IsVarArgs

Determina se o membro subjacente era um método de arity variável ou construtor.

JniIdentityHashCode

Retorna o valor da java.lang.System.identityHashCode() instância encapsulada.

(Herdado de IJavaPeerable)
JniManagedPeerState

Estado do par gerenciado.

(Herdado de IJavaPeerable)
JniObjectReferenceControlBlock

Uma referência simbólica obtida pela quebra de um identificador de método direto em suas partes simbólicas consitutent.

(Herdado de IJavaPeerable)
JniPeerMembers

Acesso ao membro e suporte à invocação.

(Herdado de IJavaPeerable)
MethodType

Retorna o tipo nominal da referência simbólica rachada, expressa como um tipo de método.

Modifiers

Retorna os modificadores de acesso do membro subjacente.

Name

Retorna o nome do membro subjacente do identificador do método rachado.

PeerReference

Retorna uma JniObjectReference das instâncias de objeto Java encapsuladas.

(Herdado de IJavaPeerable)
ReferenceKind

Retorna o tipo de referência do identificador de método rachado, que, por sua vez, determina se o membro subjacente do identificador de método era um construtor, método ou campo.

Métodos

Nome Description
Disposed()

Chamado quando a instância foi descartada.

(Herdado de IJavaPeerable)
DisposeUnlessReferenced()

Se não houver referências pendentes a essa instância, então chamará Dispose(); caso contrário, não fará nada.

(Herdado de IJavaPeerable)
Finalized()

Chamado quando a instância foi finalizada.

(Herdado de IJavaPeerable)
ReferenceKindToString(ReferenceKind)

Retorna o nome descritivo do tipo de referência fornecido, conforme definido na tabela acima.

RefKindIsField(ReferenceKind)

Este membro foi preterido.

RefKindIsValid(ReferenceKind)

Este membro foi preterido.

RefKindName(ReferenceKind)

Este membro foi preterido.

ReflectAs(Class, MethodHandles+Lookup)

Reflete o membro subjacente como um método, construtor ou objeto de campo.

SetJniIdentityHashCode(Int32)

Defina o valor retornado por JniIdentityHashCode.

(Herdado de IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

Uma referência simbólica obtida pela quebra de um identificador de método direto em suas partes simbólicas consitutent.

(Herdado de IJavaPeerable)
SetPeerReference(JniObjectReference)

Defina o valor retornado por PeerReference.

(Herdado de IJavaPeerable)
ToString(ReferenceKind, Class, String, MethodType)

Retorna uma representação de cadeia de caracteres para um MethodHandleInfo, considerando as quatro partes de sua referência simbólica.

UnregisterFromRuntime()

Cancele o registro dessa instância para que o runtime não a retorne de invocações futuras Java.Interop.JniRuntime+JniValueManager.PeekValue .

(Herdado de IJavaPeerable)

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 verificada pelo tempo de execução do Android.

JavaCast<TResult>(IJavaObject)

Uma referência simbólica obtida pela quebra de um identificador de método direto em suas partes simbólicas consitutent.

TryJavaCast<TResult>(IJavaPeerable, TResult)

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

Aplica-se a