Share via


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>직접 메서드 handle</em> 은 중간 인수 바인딩 또는 기타 변환 없이 메서드, 생성자 또는 필드를 나타냅니다. 직접 메서드 핸들에서 참조하는 메서드, 생성자 또는 필드를 em>기본 멤버</em이라고 <합니다>. 직접 메서드 핸들은 상수에 대한 CONSTANT_MethodHandle 명령을 실행하여 ldc 다음과<>>같은 방법으로 <얻을 수 있습니다. (Java Virtual Machine 사양, 섹션 4.4.8 및 5.4.3을 참조하세요.) <리튬>와 같은 Lookup#findVirtual Lookup.findVirtual조회 팩터리 메서드 중 하나를 호출하여 메서드 핸들에 기호 참조를 resolve. 기호 참조는 클래스, 이름 문자열 및 형식으로 구성됩니다. <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() 조회 클래스에 "바인딩"됩니다. 기본 메서드가 public(예: Class.forName)인 경우에도 다른 조회 클래스를 사용하여 이 메서드 핸들을 해독하지 못합니다.

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

<h1>"refkinds">Reference kinds</h1> Lookup Factory 메서드는 메서드, 생성자 및 필드에 대한 모든 주요 사용 사례에 해당합니다. 이러한 사용 사례는 다음과 <같이 작은 정수로 구분할 수 있습니다. table border=1 cellpadding=5 summary="reference kinds"><tr><th>reference kind</th th>><설명 이름</th><> scope</th><th member</th><th>>behavior</th></tr<>tr td<>1<>/td><tdREF_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 tdclass> 또는 interface</td td>><static<br<>FT f;/td><td<>(T) C.f;/td<>/tr tr<>><td3></td><td><REF_putField/td><td><class/td><td><FT f;/><td>this.f = x;</td></Tr><tr td><4/td><td><REF_putStatic/td><td>class< brFT f;<>/td>><static<td><tdC.f = arg;></td></tr tr<<>>td><5/td><td<REF_invokeVirtual>/td td<class>></td td<>/td td<>T m(A*);/td><td(T) this.m(arg*);<>/td></tr tr tr<>><td><6/td td>><REF_invokeStatic</td td>><class 또는 interface</td td>static<<>br><T m(A*);/td><td>(T) C.m(arg*);</td></tr tr>><<td><7/td><td><REF_invokeSpecial/td><td>class 또는 interface</td><td><T m(A*);/td td>><<(T) super.m(arg*);/td></tr ><tr><td>8</td><td>REF_newInvokeSpecial</td><td>class</td><td><C(A*);/td><>new C(arg*);</td></tr tr>><<td><9/td><td td>REF_invokeInterface</td><td><interface/td><td><T m(A*);/td td></td(T) this.m(arg*);></td></tr></table ><>

1.8에 추가되었습니다.

에 대한 Java 설명서입니다 java.lang.invoke.MethodHandleInfo.

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

속성

DeclaringClass

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

Handle

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

(다음에서 상속됨 IJavaObject)
IsVarArgs

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

JniIdentityHashCode

java.lang.System.identityHashCode() 래핑된 instance 값을 반환합니다.

(다음에서 상속됨 IJavaPeerable)
JniManagedPeerState

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

(다음에서 상속됨 IJavaPeerable)
JniPeerMembers

멤버 액세스 및 호출 지원.

(다음에서 상속됨 IJavaPeerable)
MethodType

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

Modifiers

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

Name

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

PeerReference

JniObjectReference 래핑된 Java 개체 instance 의 를 반환합니다.

(다음에서 상속됨 IJavaPeerable)
ReferenceKind

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

메서드

Disposed()

instance 삭제되었을 때 호출됩니다.

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

이 instance 대한 미해결 참조가 없으면 를 호출Dispose()합니다. 그렇지 않으면 아무 것도 수행하지 않습니다.

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

instance 완료되면 호출됩니다.

(다음에서 상속됨 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 호출에서 반환되지 않도록 이 instance 등록을 취소합니다.

(다음에서 상속됨 IJavaPeerable)

확장 메서드

JavaCast<TResult>(IJavaObject)

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

JavaCast<TResult>(IJavaObject)

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

GetJniTypeName(IJavaPeerable)

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

적용 대상