언어

IMethodHandleInfo 인터페이스

정의

직접 메서드 핸들을 해당 기호 요소로 크래킹하여 얻은 기호 참조입니다.

[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
특성
구현

설명

직접 메서드 핸들을 해당 기호 요소로 크래킹하여 얻은 기호 참조입니다. 직접 메서드 핸들을 해독하려면 .를 호출 Lookup#revealDirect Lookup.revealDirect합니다. <h1>"directmh">Direct Method Handles</h1> A <em>직접 메서드 핸들</em> 은 중간 인수 바인딩 또는 기타 변환이 없는 메서드, 생성자 또는 필드를 나타냅니다. 직접 메서드 핸들에서 참조하는 메서드, 생성자 또는 필드를 em <>내부 멤버</em>이라고 합니다. 직접 메서드 핸들은 상수에 대한 < 명령을 실행하여 > 다음과<>ldc같은 방법으로 CONSTANT_MethodHandle얻을 수 있습니다. (Java Virtual Machine 사양, 섹션 4.4.8 및 5.4.3을 참조하세요.) <li>: 메서드 핸들에 대한 기호 참조를 확인하기 위해 조회 팩터리 메서드(예: Lookup#findVirtual Lookup.findVirtual메서드) 중 하나를 호출합니다. 기호 참조는 클래스, 이름 문자열 및 형식으로 구성됩니다. <li>팩터리 메서드를 호출하거나 Lookup#unreflect Lookup.unreflect 메서드 Lookup#unreflectSpecial Lookup.unreflectSpecial 핸들로 변환 Method 합니다. <li>팩터리 메서드를 호출하여 메서드 Lookup#unreflectConstructor Lookup.unreflectConstructor 핸들로 변환 Constructor 합니다. <li>팩터리 메서드를 호출하거나 Lookup#unreflectGetter Lookup.unreflectGetter 메서드 Lookup#unreflectSetter Lookup.unreflectSetter 핸들로 변환 Field 합니다. </ul>

<h1>크래킹< 제한/h1> 적절한 Lookup 개체를 지정하면 직접 메서드 핸들을 해독하여 기본 메서드, 생성자 또는 필드에 대한 기호 참조를 복구할 수 있습니다. 크래킹은 대상 메서드 핸들을 만들거나 동등한 메서드 핸들을 다시 만들 수 있는 충분한 액세스 권한이 있는 개체를 통해 Lookup 수행해야 합니다.

기본 메서드가 호출자를 구분하는 경우 직접 메서드 핸들은 생성에 사용되는 조회 개체의 특정 호출자 클래스인 java.lang.invoke.MethodHandles.Lookup#lookupClass() 조회 클래스에 "바인딩"됩니다. 기본 메서드가 공용(예: Class.forName)인 경우에도 다른 조회 클래스를 사용하여 이 메서드 핸들을 해독하지 못합니다.

조회 개체 일치의 요구 사항은 예기치 않은 범위에서 기호 정보(또는 호출자 바인딩)를 사용하여 메서드 핸들의 잘못된 표시를 신뢰할 수 있는 프로그램에 대해 "빠른 실패" 동작을 제공합니다. 이 제한을 재정의하는 데 사용합니다 java.lang.invoke.MethodHandles#reflectAs .

<h1>"refkinds">참조 종류</h1> 조회 팩터리 메서드는 메서드, 생성자 및 필드에 대한 모든 주요 사용 사례에 해당합니다. 이러한 사용 사례는 다음과 같이 작은 정수로 구분할 수 있습니다. <table border=1 cellpadding=5 summary="reference kinds"><tr><th>reference kind</th><>th 설명 이름</th><th>scope</th><th>member</th><th>behavior</th></tr><tr td><>1</td/td><td>REF_getField<><>class/<td><td>FT f;</td td td><>(T) this.f;</td></tr tr><><td>2</td><td>REF_getStatic</td td><td>class 또는 interface</td><td>static<>FT f;< td><>(T) C.f;</td></tr tr><td><>3</td><td>REF_putField</td><td>class</td><td>FT f;</td><>this.f = x;</tr>< tr tr tr><td><>/td4td<><>/td tdREF_putStatic<><>/td tdclass<><>brstatic<>/tdFT f;td<><>/tdC.f = arg;</tr tr><><td><>/td5td<><>/tdREF_invokeVirtualtd<><>/tdclass<td><>/td tdT m(A*);/td<><>(T) this.m(arg*);</tr tr tr><tr ><td><>/td td6<><>/td tdREF_invokeStatictd<>< 또는 >class/tdinterface<td><>brstatic<>/tdT m(A*);td<><>/td(T) C.m(arg*);</tr tr><><td><>/td7<><>/td tdREF_invokeSpecialtd<>< 또는 >class/tdinterface<td><>/td tdT m(A*);/td<><>(T) super.m(arg*);</tr ><tr><td><>/td8td<><>/tdREF_newInvokeSpecialtd<><>/tdclass<td><>/tdC(A*);td<><>/tdnew C(arg*);</tr tr><><td><>/td9td<><>/tdREF_invokeInterfacetd<><>/tdinterface<td><>/tdT m(A*);td/td<><>(T) this.m(arg*);</tr></table ><>

1.8에 추가되었습니다.

에 대한 java.lang.invoke.MethodHandleInfoJava 설명서

이 페이지의 일부는 만들고 공유한 작업을 기반으로 하며 에 설명된 조건에 따라 사용됩니다.

속성

속성 Description
DeclaringClass

금이 간 메서드 핸들의 내부 멤버가 정의된 클래스를 반환합니다.

Handle

기본 Android 개체의 JNI 값을 가져옵니다.

(다음에서 상속됨 IJavaObject)
IsVarArgs

기본 멤버가 가변 arity 메서드 또는 생성자인지 확인합니다.

JniIdentityHashCode

래핑된 인스턴스의 java.lang.System.identityHashCode() 값을 반환합니다.

(다음에서 상속됨 IJavaPeerable)
JniManagedPeerState

관리되는 피어의 상태입니다.

(다음에서 상속됨 IJavaPeerable)
JniObjectReferenceControlBlock

직접 메서드 핸들을 해당 기호 요소로 크래킹하여 얻은 기호 참조입니다.

(다음에서 상속됨 IJavaPeerable)
JniPeerMembers

멤버 액세스 및 호출 지원.

(다음에서 상속됨 IJavaPeerable)
MethodType

메서드 형식으로 표현된 금이 간 기호 참조의 명목 형식을 반환합니다.

Modifiers

기본 멤버의 액세스 한정자를 반환합니다.

Name

금이 간 메서드 핸들의 내부 멤버의 이름을 반환합니다.

PeerReference

JniObjectReference 래핑된 Java 개체 인스턴스를 반환합니다.

(다음에서 상속됨 IJavaPeerable)
ReferenceKind

메서드 핸들의 기본 멤버가 생성자, 메서드 또는 필드인지 여부를 결정하는 금이 간 메서드 핸들의 참조 종류를 반환합니다.

메서드

속성 Description
Disposed()

인스턴스가 삭제되었을 때 호출됩니다.

(다음에서 상속됨 IJavaPeerable)
DisposeUnlessReferenced()

이 인스턴스에 대한 미해결 참조가 없으면 호출 Dispose()합니다. 그렇지 않으면 아무 작업도 수행하지 않습니다.

(다음에서 상속됨 IJavaPeerable)
Finalized()

인스턴스가 종료될 때 호출됩니다.

(다음에서 상속됨 IJavaPeerable)
ReferenceKindToString(ReferenceKind)

위의 표에 정의된 대로 지정된 참조 종류의 설명이 포함된 이름을 반환합니다.

RefKindIsField(ReferenceKind)

이 멤버는 더 이상 사용되지 않습니다.

RefKindIsValid(ReferenceKind)

이 멤버는 더 이상 사용되지 않습니다.

RefKindName(ReferenceKind)

이 멤버는 더 이상 사용되지 않습니다.

ReflectAs(Class, MethodHandles+Lookup)

기본 멤버를 메서드, 생성자 또는 필드 개체로 반영합니다.

SetJniIdentityHashCode(Int32)

에서 반환 JniIdentityHashCode하는 값을 설정합니다.

(다음에서 상속됨 IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

직접 메서드 핸들을 해당 기호 요소로 크래킹하여 얻은 기호 참조입니다.

(다음에서 상속됨 IJavaPeerable)
SetPeerReference(JniObjectReference)

에서 반환 PeerReference하는 값을 설정합니다.

(다음에서 상속됨 IJavaPeerable)
ToString(ReferenceKind, Class, String, MethodType)

기호 참조의 네 부분으로 지정된 문자열 표현 MethodHandleInfo을 반환합니다.

UnregisterFromRuntime()

런타임이 이후 Java.Interop.JniRuntime+JniValueManager.PeekValue 호출에서 반환되지 않도록 이 인스턴스의 등록을 취소합니다.

(다음에서 상속됨 IJavaPeerable)

확장명 메서드

속성 Description
GetJniTypeName(IJavaPeerable)

인스턴스 self형식의 JNI 이름을 가져옵니다.

JavaAs<TResult>(IJavaPeerable)

형식self을 강제 TResult 변환하여 강제 변환이 Java 쪽에서 유효한지 확인합니다.

JavaCast<TResult>(IJavaObject)

Android 런타임 확인 형식 변환을 수행합니다.

JavaCast<TResult>(IJavaObject)

직접 메서드 핸들을 해당 기호 요소로 크래킹하여 얻은 기호 참조입니다.

TryJavaCast<TResult>(IJavaPeerable, TResult)

형식self을 강제 TResult 변환하여 강제 변환이 Java 쪽에서 유효한지 확인합니다.

적용 대상