IMethodHandleInfo 인터페이스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
직접 메서드 핸들을 해당 기호 요소로 크래킹하여 얻은 기호 참조입니다.
[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 |
래핑된 인스턴스의 |
| JniManagedPeerState |
관리되는 피어의 상태입니다. (다음에서 상속됨 IJavaPeerable) |
| JniObjectReferenceControlBlock |
직접 메서드 핸들을 해당 기호 요소로 크래킹하여 얻은 기호 참조입니다. (다음에서 상속됨 IJavaPeerable) |
| JniPeerMembers |
멤버 액세스 및 호출 지원. (다음에서 상속됨 IJavaPeerable) |
| MethodType |
메서드 형식으로 표현된 금이 간 기호 참조의 명목 형식을 반환합니다. |
| Modifiers |
기본 멤버의 액세스 한정자를 반환합니다. |
| Name |
금이 간 메서드 핸들의 내부 멤버의 이름을 반환합니다. |
| PeerReference |
JniObjectReference 래핑된 Java 개체 인스턴스를 반환합니다. (다음에서 상속됨 IJavaPeerable) |
| ReferenceKind |
메서드 핸들의 기본 멤버가 생성자, 메서드 또는 필드인지 여부를 결정하는 금이 간 메서드 핸들의 참조 종류를 반환합니다. |
메서드
| 속성 | Description |
|---|---|
| Disposed() |
인스턴스가 삭제되었을 때 호출됩니다. (다음에서 상속됨 IJavaPeerable) |
| DisposeUnlessReferenced() |
이 인스턴스에 대한 미해결 참조가 없으면 호출 |
| Finalized() |
인스턴스가 종료될 때 호출됩니다. (다음에서 상속됨 IJavaPeerable) |
| ReferenceKindToString(ReferenceKind) |
위의 표에 정의된 대로 지정된 참조 종류의 설명이 포함된 이름을 반환합니다. |
| RefKindIsField(ReferenceKind) |
이 멤버는 더 이상 사용되지 않습니다. |
| RefKindIsValid(ReferenceKind) |
이 멤버는 더 이상 사용되지 않습니다. |
| RefKindName(ReferenceKind) |
이 멤버는 더 이상 사용되지 않습니다. |
| ReflectAs(Class, MethodHandles+Lookup) |
기본 멤버를 메서드, 생성자 또는 필드 개체로 반영합니다. |
| SetJniIdentityHashCode(Int32) |
에서 반환 |
| SetJniManagedPeerState(JniManagedPeerStates) |
직접 메서드 핸들을 해당 기호 요소로 크래킹하여 얻은 기호 참조입니다. (다음에서 상속됨 IJavaPeerable) |
| SetPeerReference(JniObjectReference) |
에서 반환 |
| ToString(ReferenceKind, Class, String, MethodType) |
기호 참조의 네 부분으로 지정된 문자열 표현 |
| UnregisterFromRuntime() |
런타임이 이후 Java.Interop.JniRuntime+JniValueManager.PeekValue 호출에서 반환되지 않도록 이 인스턴스의 등록을 취소합니다. (다음에서 상속됨 IJavaPeerable) |
확장명 메서드
| 속성 | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
인스턴스 |
| JavaAs<TResult>(IJavaPeerable) |
형식 |
| JavaCast<TResult>(IJavaObject) |
Android 런타임 확인 형식 변환을 수행합니다. |
| JavaCast<TResult>(IJavaObject) |
직접 메서드 핸들을 해당 기호 요소로 크래킹하여 얻은 기호 참조입니다. |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
형식 |