MethodHandle 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
메서드 핸들은 인수 또는 반환 값의 선택적 변환을 사용하여 기본 메서드, 생성자, 필드 또는 이와 유사한 하위 수준 작업에 대한 형식화된 직접 실행 가능 참조입니다.
[Android.Runtime.Register("java/lang/invoke/MethodHandle", ApiSince=26, DoNotGenerateAcw=true)]
public abstract class MethodHandle : Java.Lang.Object
[<Android.Runtime.Register("java/lang/invoke/MethodHandle", ApiSince=26, DoNotGenerateAcw=true)>]
type MethodHandle = class
inherit Object
- 상속
- 특성
설명
메서드 핸들은 인수 또는 반환 값의 선택적 변환을 사용하여 기본 메서드, 생성자, 필드 또는 이와 유사한 하위 수준 작업에 대한 형식화된 직접 실행 가능 참조입니다. 이러한 변환은 매우 일반적이며 #asType 변환, #bindTo 삽입, java.lang.invoke.MethodHandles#dropArguments 삭제 및 java.lang.invoke.MethodHandles#filterArguments 대체와 같은 패턴을 포함합니다.
<h1>메서드 핸들 콘텐츠</h1> 메서드 핸들은 매개 변수 및 반환 형식에 따라 동적으로 강력한 형식으로 입력됩니다. 기본 메서드의 이름 또는 정의 클래스로 구분되지 않습니다. 메서드 핸들의 고유한 #type 형식 설명자와 일치하는 기호 형식 설명자를 사용하여 메서드 핸들을 호출해야 합니다.
모든 메서드 핸들은 접근자를 통해 해당 형식 설명자를 보고합니다 #type type
. 이 형식 설명자는 java.lang.invoke.MethodType MethodType
구조가 일련의 클래스인 개체이며, 그 중 하나는 메서드의 반환 형식입니다(또는 void.class
없는 경우).
메서드 핸들의 형식은 수락하는 호출 형식 및 해당 호출에 적용되는 변환 종류를 제어합니다.
메서드 핸들에는 및 라는 #invokeExact invokeExact
특수 호출자 메서드 쌍이 포함되어 있습니다 #invoke invoke
. 두 호출자 메서드 모두 인수 및 반환 값의 변환에 의해 수정된 대로 메서드 핸들의 기본 메서드, 생성자, 필드 또는 기타 작업에 직접 액세스할 수 있습니다. 두 호출자는 메서드 핸들의 자체 형식과 정확히 일치하는 호출을 수락합니다. 일반, 비활성 호출자는 다른 호출 형식의 범위도 허용합니다.
메서드 핸들은 변경할 수 없으며 표시되는 상태가 없습니다. 물론 상태를 나타내는 기본 메서드 또는 데이터에 바인딩할 수 있습니다. Java 메모리 모델과 관련하여 모든 메서드 핸들은 모든 내부 필드가 최종 변수인 것처럼 동작합니다. 즉, 애플리케이션에 표시되는 모든 메서드 핸들이 항상 완전히 형성됩니다. 메서드 핸들이 데이터 경합의 공유 변수를 통해 게시되는 경우에도 마찬가지입니다.
메서드 핸들은 사용자가 서브클래스할 수 없습니다. 구현은 내부 서브클래스를 만들거나 만들지 않을 수 있으며, 이 MethodHandle
서브클래스는 작업을 통해 java.lang.Object#getClass Object.getClass
표시될 수 있습니다. 프로그래머가 특정 클래스의 메서드 핸들에 대한 결론을 도출해서는 안 됩니다. 메서드 핸들 클래스 계층 구조(있는 경우)가 때때로 또는 다른 공급업체의 구현 간에 변경 될 수 있기 때문에.
<h1>메서드 핸들 컴파일</h1> Java 메서드 호출 식 명명 invokeExact
또는 invoke
Java 소스 코드에서 메서드 핸들을 호출할 수 있습니다. 소스 코드의 관점에서 이러한 메서드는 모든 인수를 사용할 수 있으며 결과는 모든 반환 형식으로 캐스팅될 수 있습니다. 공식적으로 이 작업은 호출자 메서드 Object
가 형식 및 가변 arity Object
인수를 반환하도록 하여 수행되지만, 이러한 호출의 자유를 JVM 실행 스택에 직접 연결하는 em>시그니처 다형성</em>이라는 <추가 품질이 있습니다.
가상 메서드와 마찬가지로 소스 수준에서 를 호출 invokeExact
하고 invoke
명령으로 invokevirtual
컴파일합니다. 이례적으로 컴파일러는 실제 인수 형식을 기록해야 하며 인수에 대한 메서드 호출 변환을 수행하지 않을 수 있습니다. 대신 변환되지 않은 자체 형식에 따라 스택에 푸시해야 합니다. 메서드 핸들 개체 자체는 인수 앞에 스택에 푸시됩니다. 그런 다음 컴파일러는 인수 및 반환 형식을 설명하는 기호 형식 설명자를 사용하여 메서드 핸들을 호출합니다.
전체 기호 형식 설명자를 실행하려면 컴파일러에서도 반환 형식을 결정해야 합니다. 이는 메서드 호출 식의 캐스트를 기반으로 합니다. 호출이 있는 경우 또는 Object
호출이 식이거나 호출이 문인 경우 다른 void
경우 입니다. 캐스트는 기본 형식일 수 있지만 그렇지 않을 void
수 있습니다.
코너 사례로 캐스팅되지 않은 null
인수에는 의 java.lang.Void
기호 형식 설명자가 지정됩니다. null 참조를 제외한 형식의 참조가 없으므로 형식 Void
Void
과의 모호성은 무해합니다.
<h1>메서드 핸들 호출</h1> 명령이 처음 실행될 때 invokevirtual
명령의 이름을 기호적으로 확인하고 메서드 호출이 정적으로 합법적인지 확인하여 연결됩니다. 이는 및 invoke
에 invokeExact
대한 호출의 경우입니다. 이 경우 컴파일러에서 내보낸 기호 형식 설명자가 올바른 구문을 확인하고 포함된 이름을 확인합니다. invokevirtual
따라서 기호 형식 설명자가 구문적으로 잘 형성되고 형식이 존재하는 한 메서드 핸들을 호출하는 명령이 항상 연결됩니다.
연결 후 가 invokevirtual
실행되면 JVM에서 수신 메서드 핸들의 형식을 먼저 검사하여 기호 형식 설명자와 일치하는지 확인합니다. 형식 일치가 실패하면 호출자가 호출하는 메서드가 호출되는 개별 메서드 핸들에 없음을 의미합니다.
의 invokeExact
경우 호출의 형식 설명자(기호 형식 이름을 확인한 후)는 수신 메서드 핸들의 메서드 형식과 정확히 일치해야 합니다. 일반, inexact invoke
의 경우 확인된 형식 설명자는 수신기의 #asType asType
메서드에 대한 유효한 인수여야 합니다. 따라서 일반 invoke
은 보다 invokeExact
더 관대합니다.
형식 일치 후 에 대한 invokeExact
호출은 메서드 핸들의 기본 메서드(또는 다른 동작일 수 있음)를 직접 호출하고 즉시 호출합니다.
호출자가 지정한 기호 형식 설명자가 메서드 핸들의 자체 형식과 정확히 일치하는 경우 일반 invoke
호출은 에 대한 호출 invokeExact
과 동일하게 작동합니다. 형식이 일치하지 invoke
않는 경우 를 호출 #asType asType
하는 것처럼 수신 메서드 핸들의 형식을 조정하여 정확히 호출 가능한 메서드 핸들을 가져오려고 합니다 M2
. 이렇게 하면 호출자와 호출자 간에 메서드 형식을 보다 강력하게 협상할 수 있습니다.
(<em>Note:</em> 조정된 메서드 핸들 M2
은 직접 관찰할 수 없으므로 구현을 구체화할 필요가 없습니다.)
<h1>호출 검사</h1> 일반적인 프로그램에서는 메서드 핸들 형식 일치가 일반적으로 성공합니다. 그러나 일치가 실패하면 JVM은 를 직접(의 invokeExact
경우) 또는 에 대한 호출 asType
에 실패한 것처럼 간접적으로 throwWrongMethodTypeException
합니다(의 invoke
경우).
따라서 정적으로 형식화된 프로그램에서 연결 오류로 표시될 수 있는 메서드 형식 불일치는 메서드 핸들을 사용하는 프로그램에서 동적 WrongMethodTypeException
으로 표시될 수 있습니다.
메서드 형식은 "live" Class
개체를 포함하므로 메서드 형식 일치는 형식 이름과 클래스 로더를 모두 고려합니다. 따라서 메서드 핸들 M
이 한 클래스 로더 L1
에서 만들어지고 다른 L2
에서 사용되는 경우에도 메서드 핸들 호출은 형식이 안전합니다. 에서 확인된 대로 호출자의 기호 형식 설명자가 에서 확인된 L2
L1
대로 원래 호출 수신자 메서드의 기호 형식 설명자와 일치하기 때문입니다. 의 해결 L1
방법은 가 생성되고 해당 형식이 할당된 경우 발생 M
하며, 명령이 연결되면 의 해결 L2
방법이 invokevirtual
발생합니다.
형식 설명자 검사 외에도 기본 메서드를 호출하는 메서드 핸들의 기능은 제한되지 않습니다. 메서드 핸들이 해당 메서드에 액세스할 수 있는 클래스에 의해 공용이 아닌 메서드에 형성된 경우 해당 메서드에 대한 참조를 수신하는 모든 호출자가 결과 핸들을 어느 위치에서든 사용할 수 있습니다.
반사 메서드가 호출될 때마다 액세스가 검사되는 핵심 리플렉션 API와 달리 메서드 핸들을 만들 때 메서드 핸들 액세스 검사가 수행됩니다. (아래 참조)의 ldc
경우 상수 메서드 핸들의 기본이 되는 상수 풀 항목을 연결하는 과정의 일부로 액세스 검사가 수행됩니다.
따라서 비공용 메서드 또는 비공용 클래스의 메서드에 대한 핸들은 일반적으로 비밀로 유지되어야 합니다. 신뢰할 수 없는 코드에서 사용하지 않는 한 신뢰할 수 없는 코드로 전달해서는 안 됩니다.
<h1>메서드 핸들 만들기</h1> Java 코드는 해당 코드에 액세스할 수 있는 메서드, 생성자 또는 필드에 직접 액세스하는 메서드 핸들을 만들 수 있습니다. 이 작업은 반사 기능 기반 API를 java.lang.invoke.MethodHandles.Lookup MethodHandles.Lookup
통해 수행됩니다. 예를 들어 에서 정적 메서드 핸들을 java.lang.invoke.MethodHandles.Lookup#findStatic Lookup.findStatic
가져올 수 있습니다. 코어 리플렉션 API 개체의 변환 메서드(예: java.lang.invoke.MethodHandles.Lookup#unreflect Lookup.unreflect
)도 있습니다.
클래스 및 문자열과 마찬가지로 액세스 가능한 필드, 메서드 및 생성자에 해당하는 메서드 핸들은 클래스 파일의 상수 풀에서 바이트 코드로 로드 ldc
할 상수로 직접 나타낼 수도 있습니다. 새로운 유형의 상수 풀 항목인 CONSTANT_MethodHandle
는 연결된 CONSTANT_Methodref
, CONSTANT_InterfaceMethodref
또는 CONSTANT_Fieldref
상수 풀 항목을 직접 참조합니다. (메서드 핸들 상수에 대한 자세한 내용은 Java Virtual Machine 사양의 섹션 4.4.8 및 5.4.3.5를 참조하세요.)
변수 arity 한정자 비트(0x0080
)가 있는 메서드 또는 생성자에서 조회 또는 상수 로드에 의해 생성된 메서드 핸들은 의 도움으로 #asVarargsCollector asVarargsCollector
정의된 것처럼 해당 변수의 진도를 갖습니다.
메서드 참조는 정적 또는 비정적 메서드를 참조할 수 있습니다. 비정적 경우 메서드 핸들 형식에는 다른 인수 앞에 추가된 명시적 수신기 인수가 포함됩니다. 메서드 핸들의 형식에서 초기 수신기 인수는 메서드가 처음 요청된 클래스에 따라 입력됩니다. (예: 를 통해 ldc
비정적 메서드 핸들을 가져오는 경우 수신기의 형식은 상수 풀 항목에 명명된 클래스입니다.)
메서드 핸들 상수는 해당 바이트코드 지침을 확인하는 동일한 링크 시간 액세스가 적용되며 ldc
, 바이트코드 동작이 이러한 오류를 throw하는 경우 명령이 해당 링크 오류를 throw합니다.
이를 위해 보호된 멤버에 대한 액세스는 액세스 클래스 또는 해당 서브클래스 중 하나의 수신기로만 제한되며, 액세스 클래스는 보호된 멤버 정의 클래스의 서브클래스(또는 패키지 형제)여야 합니다. 메서드 참조가 현재 패키지 외부의 보호된 비정적 메서드 또는 클래스 필드를 참조하는 경우 수신기 인수는 액세스 클래스의 형식으로 좁혀집니다.
가상 메서드에 대한 메서드 핸들이 호출되면 메서드는 항상 수신기에서 조회됩니다(즉, 첫 번째 인수).
특정 가상 메서드 구현에 대한 가상이 아닌 메서드 핸들도 만들 수 있습니다. 수신기 유형에 따라 가상 조회를 수행하지 않습니다. 이러한 메서드 핸들은 명령이 동일한 메서드에 invokespecial
미치는 영향을 시뮬레이션합니다.
<h1>사용 예제</h1> 다음은 사용의 <몇 가지 예입니다. blockquote>
{@code
Object x, y; String s; int i;
MethodType mt; MethodHandle mh;
MethodHandles.Lookup lookup = MethodHandles.lookup();
// mt is (char,char)String
mt = MethodType.methodType(String.class, char.class, char.class);
mh = lookup.findVirtual(String.class, "replace", mt);
s = (String) mh.invokeExact("daddy",'d','n');
// invokeExact(Ljava/lang/String;CC)Ljava/lang/String;
assertEquals(s, "nanny");
// weakly typed invocation (using MHs.invoke)
s = (String) mh.invokeWithArguments("sappy", 'p', 'v');
assertEquals(s, "savvy");
// mt is (Object[])List
mt = MethodType.methodType(java.util.List.class, Object[].class);
mh = lookup.findStatic(java.util.Arrays.class, "asList", mt);
assert(mh.isVarargsCollector());
x = mh.invoke("one", "two");
// invoke(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;
assertEquals(x, java.util.Arrays.asList("one","two"));
// mt is (Object,Object,Object)Object
mt = MethodType.genericMethodType(3);
mh = mh.asType(mt);
x = mh.invokeExact((Object)1, (Object)2, (Object)3);
// invokeExact(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
assertEquals(x, java.util.Arrays.asList(1,2,3));
// mt is ()int
mt = MethodType.methodType(int.class);
mh = lookup.findVirtual(java.util.List.class, "size", mt);
i = (int) mh.invokeExact(java.util.Arrays.asList(1,2,3));
// invokeExact(Ljava/util/List;)I
assert(i == 3);
mt = MethodType.methodType(void.class, String.class);
mh = lookup.findVirtual(java.io.PrintStream.class, "println", mt);
mh.invokeExact(System.out, "Hello, world.");
// invokeExact(Ljava/io/PrintStream;Ljava/lang/String;)V
}
</blockquote> 위 또는 일반 invoke
에 대한 invokeExact
각 호출은 다음 주석에 표시된 기호 형식 설명자를 사용하여 단일 invokevirtual 명령을 생성합니다. 이러한 예제에서 도우미 메서드 assertEquals
는 인수를 호출 java.util.Objects#equals(Object,Object) Objects.equals
하고 결과가 true임을 어설션하는 메서드로 간주됩니다.
<h1>Exceptions</h1> 메서드 및 invoke
는 메서드 invokeExact
핸들이 throw할 수 있는 항목에 정적 제한이 없음을 나타내는 을 throwjava.lang.Throwable Throwable
하도록 선언됩니다. JVM은 검사된 예외와 선택되지 않은 예외를 구분하지 않으므로(물론 클래스가 아닌) 바이트코드 셰이프에 대해 확인된 예외를 호출하는 방법에서 메서드 처리 호출에 대한 특별한 영향은 없습니다. 그러나 Java 소스 코드에서 메서드 핸들 호출을 수행하는 메서드는 를 명시적으로 throw Throwable
하거나, 그렇지 않으면 모든 throw 가능 항목을 로컬로 catch해야 하며, 컨텍스트에서 합법적인 메서드만 다시 발생시키고 잘못된 메서드를 래핑해야 합니다.
<h1>"sigpoly">Signature polymorphism</h1> 및 plain invoke
의 invokeExact
비정상적인 컴파일 및 연결 동작은 em>signature polymorphism</em>이라는 용어<로 참조됩니다. Java 언어 사양에 정의된 대로 서명 다형 메서드는 광범위한 호출 서명 및 반환 형식으로 작동할 수 있는 메서드입니다.
소스 코드에서 요청된 기호 형식 설명자에 관계없이 서명 다형 메서드에 대한 호출이 컴파일됩니다. 평소와 같이 Java 컴파일러는 명명된 메서드에 대해 지정된 기호 형식 설명자를 사용하여 명령을 내 invokevirtual
보낸다. 비정상적인 부분은 기호 형식 설명자가 메서드 선언이 아닌 실제 인수 및 반환 형식에서 파생된다는 것입니다.
JVM이 서명 다형 호출이 포함된 바이트코드를 처리하면 기호 형식 설명자에 관계없이 이러한 호출을 성공적으로 연결합니다. (형식 안전을 유지하기 위해 JVM은 다른 곳에서 설명한 대로 적절한 동적 형식 검사로 이러한 호출을 보호합니다.)
컴파일러 백 엔드를 포함한 바이트코드 생성기는 이러한 메서드에 대해 변형되지 않은 기호 형식 설명자를 내보내야 합니다. 링크 오류를 보고하지 않고 이러한 형식이 지정되지 않은 설명자를 수락하려면 기호 연결을 결정하는 도구가 필요합니다.
<h1>메서드 핸들과 코어 리플렉션 API</h1> API에서 java.lang.invoke.MethodHandles.Lookup Lookup
팩터리 메서드를 사용하여 핵심 리플렉션 API 개체가 나타내는 모든 클래스 멤버를 동작에 해당하는 메서드 핸들로 변환할 수 있습니다. 예를 들어 반사는 를 java.lang.reflect.Method Method
사용하여 java.lang.invoke.MethodHandles.Lookup#unreflect Lookup.unreflect
메서드 핸들로 변환할 수 있습니다. 결과 메서드 핸들은 일반적으로 기본 클래스 멤버에 대한 보다 직접적이고 효율적인 액세스를 제공합니다.
특별한 경우, 핵심 리플렉션 API를 사용하여 이 클래스에서 시그니처 다형 메서드 invokeExact
또는 일반 invoke
을 보는 경우 일반 비 다형 메서드로 표시됩니다. 에서 볼 수 java.lang.Class#getDeclaredMethod Class.getDeclaredMethod
있듯이 반사 모양은 이 API의 특별한 상태 영향을 받지 않습니다. 예를 들어 는 java.lang.reflect.Method#getModifiers Method.getModifiers
이 경우 native
및 varargs
비트를 포함하여 유사하게 선언된 메서드에 필요한 한정자 비트를 정확하게 보고합니다.
반영된 메서드와 마찬가지로 이러한 메서드(반영된 경우)는 를 통해 java.lang.reflect.Method#invoke java.lang.reflect.Method.invoke
호출될 수 있습니다. 그러나 이러한 반사 호출은 메서드 핸들 호출을 초래하지 않습니다. 필수 인수(형식 Object[]
의 단일 인수)를 전달한 경우 이러한 호출은 인수를 무시하고 을 throw합니다 UnsupportedOperationException
.
지침은 기호 형식 설명자에서 메서드 핸들을 기본적으로 호출할 수 있으므로 invokevirtual
이 반사 보기는 바이트 코드를 통해 이러한 메서드의 일반적인 프레젠테이션과 충돌합니다. 따라서 이러한 두 네이티브 메서드는 에서 반사적으로 볼 Class.getDeclaredMethod
때 자리 표시자로만 간주될 수 있습니다.
특정 형식 설명자에 대한 호출자 메서드를 가져오려면 또는 java.lang.invoke.MethodHandles#invoker MethodHandles.invoker
를 사용합니다java.lang.invoke.MethodHandles#exactInvoker MethodHandles.exactInvoker
. 또한 API는 java.lang.invoke.MethodHandles.Lookup#findVirtual Lookup.findVirtual
지정된 형식 설명자에 대해 또는 일반 invoke
를 호출 invokeExact
하는 메서드 핸들을 반환할 수 있습니다.
<h1>메서드 핸들과 Java 제네릭 간의 상호 운용/h1> Java 제네릭< 형식으로 선언된 메서드, 생성자 또는 필드에서 메서드 핸들을 가져올 수 있습니다. 코어 리플렉션 API와 마찬가지로 메서드 핸들의 형식은 소스 수준 형식의 삭제에서 생성됩니다. 메서드 핸들을 호출할 때 해당 인수의 형식 또는 반환 값 캐스트 형식은 제네릭 형식 또는 형식 인스턴스일 수 있습니다. 이 경우 컴파일러는 명령에 대한 invokevirtual
기호 형식 설명자를 생성할 때 해당 형식을 지우기로 바꿉니다.
메서드 핸들은 함수와 유사한 형식과 매개 변수가 있는 Java 형식 간에 세 가지 불일치가 있기 때문에 Java 매개 변수화(제네릭) 형식 측면에서 함수와 유사한 형식을 나타내지 않습니다. <ul><li>메서드 형식은 인수 없음부터 허용되는 인수의 최대 수까지 가능한 모든 범위에서 범위가 지정됩니다. 제네릭은 variadic이 아니므로 이를 나타낼 수 없습니다.</li li><>메서드 형식은 Java 제네릭 형식의 범위를 초과할 수 없는 기본 형식의 인수를 지정할 수 있습니다.</li li><>메서드 핸들(결합자)에 대한 상위 순서 함수는 여러 종류의 함수 형식을 포함하여 광범위한 함수 형식에서 일반적으로 사용되는 경우가 많습니다. Java 형식 매개 변수를 사용하여 이러한 일반성을 나타내는 것은 불가능합니다.</li></ul>
<h1>"maxarity">Arity limits</h1> JVM은 모든 종류의 모든 메서드 및 생성자에 255개의 누적 인수의 절대 제한을 적용합니다. 이 제한은 특정 경우에 <더 제한적으로 표시할 수 있습니다. ul><li>A long
또는 double
인수 개수(arity 제한을 위해)는 두 개의 인수 슬롯으로 표시됩니다. <li>비정적 메서드는 메서드가 호출되는 개체에 대해 추가 인수를 사용합니다. <li>A 생성자는 생성되는 개체에 대해 추가 인수를 사용합니다. <li>메서드 핸들’ s invoke
메서드(또는 다른 서명 다형 메서드)는 가상이 아니고 가상이 아닌 수신기 개체 외에도 메서드 핸들 자체에 대한 추가 인수를 사용합니다. </ul> 이러한 제한은 누적 인수에 대한 JVM 제한으로 인해 특정 메서드 핸들을 만들 수 없음을 의미합니다. 예를 들어 정적 JVM 메서드가 정확히 255개의 인수를 허용하는 경우 메서드 핸들을 만들 수 없습니다. 불가능한 메서드 형식을 사용하여 메서드 핸들을 만들려고 시도하면 가 발생합니다 IllegalArgumentException
. 특히 메서드 핸들은 rsquo를&. s 형식에는 정확한 최대 255의 진부함이 없어야 합니다.
에 대한 Java 설명서입니다 java.lang.invoke.MethodHandle
.
이 페이지의 일부는 만들고 공유하며 에 설명된 조건에 따라 사용되는 작업을 기반으로 수정됩니다.
생성자
MethodHandle(IntPtr, JniHandleOwnership) |
메서드 핸들은 인수 또는 반환 값의 선택적 변환을 사용하여 기본 메서드, 생성자, 필드 또는 이와 유사한 하위 수준 작업에 대한 형식화된 직접 실행 가능 참조입니다. |
속성
Class |
이 |
Handle |
기본 Android instance 대한 핸들입니다. (다음에서 상속됨 Object) |
IsVarargsCollector |
이 메서드 핸들이 #asVarargsCollector 변수 arity 호출을 지원하는지 여부를 결정합니다. |
JniIdentityHashCode |
메서드 핸들은 인수 또는 반환 값의 선택적 변환을 사용하여 기본 메서드, 생성자, 필드 또는 이와 유사한 하위 수준 작업에 대한 형식화된 직접 실행 가능 참조입니다. (다음에서 상속됨 Object) |
JniPeerMembers |
메서드 핸들은 인수 또는 반환 값의 선택적 변환을 사용하여 기본 메서드, 생성자, 필드 또는 이와 유사한 하위 수준 작업에 대한 형식화된 직접 실행 가능 참조입니다. |
PeerReference |
메서드 핸들은 인수 또는 반환 값의 선택적 변환을 사용하여 기본 메서드, 생성자, 필드 또는 이와 유사한 하위 수준 작업에 대한 형식화된 직접 실행 가능 참조입니다. (다음에서 상속됨 Object) |
ThresholdClass |
메서드 핸들은 인수 또는 반환 값의 선택적 변환을 사용하여 기본 메서드, 생성자, 필드 또는 이와 유사한 하위 수준 작업에 대한 형식화된 직접 실행 가능 참조입니다. |
ThresholdType |
메서드 핸들은 인수 또는 반환 값의 선택적 변환을 사용하여 기본 메서드, 생성자, 필드 또는 이와 유사한 하위 수준 작업에 대한 형식화된 직접 실행 가능 참조입니다. |
메서드
AsCollector(Class, Int32) |
<지정된 수의 후행 위치 인수를 수락하고 배열 인수로 수집하는 em>array-collecting</em> 메서드 핸들을 만듭니다. |
AsCollector(Int32, Class, Int32) |
<지정된 위치에서 시작하는 지정된 수의 위치 인수를 수락하고 배열 인수로 수집하는 em>array-collecting</em> 메서드 핸들을 만듭니다. |
AsFixedArity() |
<>현재 메서드 핸들과 동일한 em 고정 arity</em> 메서드 핸들을 만듭니다. |
AsSpreader(Class, Int32) |
<후행 배열 인수를 허용하고< 해당 요소를 위치 인수로 분산하는 em>배열 분산/em> 메서드 핸들을 만듭니다. |
AsSpreader(Int32, Class, Int32) |
<지정된 위치에서 배열 인수를 수락하고< 해당 요소를 배열 대신 위치 인수로 분산하는 em>배열 분산/em> 메서드 핸들을 만듭니다. |
AsType(MethodType) |
현재 메서드 핸들의 형식을 새 형식으로 조정하는 어댑터 메서드 핸들을 생성합니다. |
AsVarargsCollector(Class) |
<여러 후행 위치 인수를 수락하고 배열 인수로 수집할 수 있는 em>변수 arity</em> 어댑터를 만듭니다. |
BindTo(Object) |
메서드 핸들을 호출하지 않고 값을 |
Clone() |
이 개체의 복사본을 만들고 반환합니다. (다음에서 상속됨 Object) |
Dispose() |
메서드 핸들은 인수 또는 반환 값의 선택적 변환을 사용하여 기본 메서드, 생성자, 필드 또는 이와 유사한 하위 수준 작업에 대한 형식화된 직접 실행 가능 참조입니다. (다음에서 상속됨 Object) |
Dispose(Boolean) |
메서드 핸들은 인수 또는 반환 값의 선택적 변환을 사용하여 기본 메서드, 생성자, 필드 또는 이와 유사한 하위 수준 작업에 대한 형식화된 직접 실행 가능 참조입니다. (다음에서 상속됨 Object) |
Equals(Object) |
다른 개체가 이 개체와 "같음"인지 여부를 나타냅니다. (다음에서 상속됨 Object) |
GetHashCode() |
개체의 해시 코드 값을 반환합니다. (다음에서 상속됨 Object) |
Invoke(Object[]) |
메서드 핸들을 호출하여 호출자 형식 설명자를 허용하고 선택적으로 인수 및 반환 값에 대한 변환을 수행합니다. |
InvokeExact(Object[]) |
메서드 핸들을 호출하여 호출자 형식 설명자를 허용하지만 정확한 형식 일치가 요구됩니다. |
InvokeWithArguments(IList<Object>) |
지정된 배열의 인수를 메서드 핸들에 전달하여 형식만 |
InvokeWithArguments(Object[]) |
변수 arity 호출을 수행하여 지정된 목록의 인수를 메서드 핸들에 전달합니다. 마치 호출 사이트에서 형식만 |
JavaFinalize() |
가비지 수집에서 개체에 대한 참조가 더 이상 없다고 판단할 때 개체의 가비지 수집기에서 호출됩니다. (다음에서 상속됨 Object) |
Notify() |
이 개체의 모니터에서 대기 중인 단일 스레드를 해제합니다. (다음에서 상속됨 Object) |
NotifyAll() |
이 개체의 모니터에서 대기 중인 모든 스레드를 해제합니다. (다음에서 상속됨 Object) |
SetHandle(IntPtr, JniHandleOwnership) |
Handle 속성을 설정합니다. (다음에서 상속됨 Object) |
ToArray<T>() |
메서드 핸들은 인수 또는 반환 값의 선택적 변환을 사용하여 기본 메서드, 생성자, 필드 또는 이와 유사한 하위 수준 작업에 대한 형식화된 직접 실행 가능 참조입니다. (다음에서 상속됨 Object) |
ToString() |
개체의 문자열 표현을 반환합니다. (다음에서 상속됨 Object) |
Type() |
이 메서드 핸들의 형식을 보고합니다. |
UnregisterFromRuntime() |
메서드 핸들은 인수 또는 반환 값의 선택적 변환을 사용하여 기본 메서드, 생성자, 필드 또는 이와 유사한 하위 수준 작업에 대한 형식화된 직접 실행 가능 참조입니다. (다음에서 상속됨 Object) |
Wait() |
현재 스레드가 깨어날 때까지 대기하게 합니다( 일반적으로 <알림을 받><거나 <>중단/>em>)합니다<. (다음에서 상속됨 Object) |
Wait(Int64) |
현재 스레드가 깨어날 때까지 대기하게 합니다. 일반적으로 <>알림을 받<거나 <중단</>내보내>>거나 일정량의 실시간이 경과할 때까지 대기합니다. (다음에서 상속됨 Object) |
Wait(Int64, Int32) |
현재 스레드가 깨어날 때까지 대기하게 합니다. 일반적으로 <>알림을 받<거나 <중단</>내보내>>거나 일정량의 실시간이 경과할 때까지 대기합니다. (다음에서 상속됨 Object) |
WithVarargs(Boolean) |
부울 플래그가 true이면 이 메서드 핸들을 변수 #asVarargsCollector 조정합니다. 그렇지 않으면 고정된 #asFixedArity. |
명시적 인터페이스 구현
IJavaPeerable.Disposed() |
메서드 핸들은 인수 또는 반환 값의 선택적 변환을 사용하여 기본 메서드, 생성자, 필드 또는 이와 유사한 하위 수준 작업에 대한 형식화된 직접 실행 가능 참조입니다. (다음에서 상속됨 Object) |
IJavaPeerable.DisposeUnlessReferenced() |
메서드 핸들은 인수 또는 반환 값의 선택적 변환을 사용하여 기본 메서드, 생성자, 필드 또는 이와 유사한 하위 수준 작업에 대한 형식화된 직접 실행 가능 참조입니다. (다음에서 상속됨 Object) |
IJavaPeerable.Finalized() |
메서드 핸들은 인수 또는 반환 값의 선택적 변환을 사용하여 기본 메서드, 생성자, 필드 또는 이와 유사한 하위 수준 작업에 대한 형식화된 직접 실행 가능 참조입니다. (다음에서 상속됨 Object) |
IJavaPeerable.JniManagedPeerState |
메서드 핸들은 인수 또는 반환 값의 선택적 변환을 사용하여 기본 메서드, 생성자, 필드 또는 이와 유사한 하위 수준 작업에 대한 형식화된 직접 실행 가능 참조입니다. (다음에서 상속됨 Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
메서드 핸들은 인수 또는 반환 값의 선택적 변환을 사용하여 기본 메서드, 생성자, 필드 또는 이와 유사한 하위 수준 작업에 대한 형식화된 직접 실행 가능 참조입니다. (다음에서 상속됨 Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
메서드 핸들은 인수 또는 반환 값의 선택적 변환을 사용하여 기본 메서드, 생성자, 필드 또는 이와 유사한 하위 수준 작업에 대한 형식화된 직접 실행 가능 참조입니다. (다음에서 상속됨 Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) |
메서드 핸들은 인수 또는 반환 값의 선택적 변환을 사용하여 기본 메서드, 생성자, 필드 또는 이와 유사한 하위 수준 작업에 대한 형식화된 직접 실행 가능 참조입니다. (다음에서 상속됨 Object) |
확장 메서드
JavaCast<TResult>(IJavaObject) |
Android 런타임 확인 형식 변환을 수행합니다. |
JavaCast<TResult>(IJavaObject) |
메서드 핸들은 인수 또는 반환 값의 선택적 변환을 사용하여 기본 메서드, 생성자, 필드 또는 이와 유사한 하위 수준 작업에 대한 형식화된 직접 실행 가능 참조입니다. |
GetJniTypeName(IJavaPeerable) |
메서드 핸들은 인수 또는 반환 값의 선택적 변환을 사용하여 기본 메서드, 생성자, 필드 또는 이와 유사한 하위 수준 작업에 대한 형식화된 직접 실행 가능 참조입니다. |