Share via


MethodHandle 클래스

정의

메서드 핸들은 인수 또는 반환 값의 선택적 변환을 사용하여 기본 메서드, 생성자, 필드 또는 이와 유사한 하위 수준 작업에 대한 형식화된 직접 실행 가능 참조입니다.

[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
상속
MethodHandle
특성

설명

메서드 핸들은 인수 또는 반환 값의 선택적 변환을 사용하여 기본 메서드, 생성자, 필드 또는 이와 유사한 하위 수준 작업에 대한 형식화된 직접 실행 가능 참조입니다. 이러한 변환은 매우 일반적이며 #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 참조를 제외한 형식의 참조가 없으므로 형식 VoidVoid 과의 모호성은 무해합니다.

<h1>메서드 핸들 호출</h1> 명령이 처음 실행될 때 invokevirtual 명령의 이름을 기호적으로 확인하고 메서드 호출이 정적으로 합법적인지 확인하여 연결됩니다. 이는 및 invokeinvokeExact 대한 호출의 경우입니다. 이 경우 컴파일러에서 내보낸 기호 형식 설명자가 올바른 구문을 확인하고 포함된 이름을 확인합니다. 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에서 사용되는 경우에도 메서드 핸들 호출은 형식이 안전합니다. 에서 확인된 대로 호출자의 기호 형식 설명자가 에서 확인된 L2L1대로 원래 호출 수신자 메서드의 기호 형식 설명자와 일치하기 때문입니다. 의 해결 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 invokeinvokeExact 비정상적인 컴파일 및 연결 동작은 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 이 경우 nativevarargs 비트를 포함하여 유사하게 선언된 메서드에 필요한 한정자 비트를 정확하게 보고합니다.

반영된 메서드와 마찬가지로 이러한 메서드(반영된 경우)는 를 통해 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

Object의 런타임 클래스를 반환합니다.

(다음에서 상속됨 Object)
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)

메서드 핸들을 호출하지 않고 값을 x 메서드 핸들의 첫 번째 인수에 바인딩합니다.

Clone()

이 개체의 복사본을 만들고 반환합니다.

(다음에서 상속됨 Object)
Dispose()

메서드 핸들은 인수 또는 반환 값의 선택적 변환을 사용하여 기본 메서드, 생성자, 필드 또는 이와 유사한 하위 수준 작업에 대한 형식화된 직접 실행 가능 참조입니다.

(다음에서 상속됨 Object)
Dispose(Boolean)

메서드 핸들은 인수 또는 반환 값의 선택적 변환을 사용하여 기본 메서드, 생성자, 필드 또는 이와 유사한 하위 수준 작업에 대한 형식화된 직접 실행 가능 참조입니다.

(다음에서 상속됨 Object)
Equals(Object)

다른 개체가 이 개체와 "같음"인지 여부를 나타냅니다.

(다음에서 상속됨 Object)
GetHashCode()

개체의 해시 코드 값을 반환합니다.

(다음에서 상속됨 Object)
Invoke(Object[])

메서드 핸들을 호출하여 호출자 형식 설명자를 허용하고 선택적으로 인수 및 반환 값에 대한 변환을 수행합니다.

InvokeExact(Object[])

메서드 핸들을 호출하여 호출자 형식 설명자를 허용하지만 정확한 형식 일치가 요구됩니다.

InvokeWithArguments(IList<Object>)

지정된 배열의 인수를 메서드 핸들에 전달하여 형식만 Object언급하고 그 진위가 인수 배열의 길이인 호출 사이트의 inexact #invoke invoke 를 통해 메서드 핸들에 전달하는 변수 arity 호출을 수행합니다.

InvokeWithArguments(Object[])

변수 arity 호출을 수행하여 지정된 목록의 인수를 메서드 핸들에 전달합니다. 마치 호출 사이트에서 형식만 Object언급하고 그 진위가 인수 목록의 길이인 호출 사이트의 인덱스를 #invoke invoke 통해 전달합니다.

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)

메서드 핸들은 인수 또는 반환 값의 선택적 변환을 사용하여 기본 메서드, 생성자, 필드 또는 이와 유사한 하위 수준 작업에 대한 형식화된 직접 실행 가능 참조입니다.

적용 대상