다음을 통해 공유


MethodHandles.PermuteArguments(MethodHandle, MethodType, Int32[]) 메서드

정의

인수를 다시 정렬하여 지정된 메서드 핸들의 호출 시퀀스를 새 형식으로 조정하는 메서드 핸들을 생성합니다.

[Android.Runtime.Register("permuteArguments", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;[I)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)]
public static Java.Lang.Invoke.MethodHandle? PermuteArguments (Java.Lang.Invoke.MethodHandle? target, Java.Lang.Invoke.MethodType? newType, params int[]? reorder);
[<Android.Runtime.Register("permuteArguments", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;[I)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)>]
static member PermuteArguments : Java.Lang.Invoke.MethodHandle * Java.Lang.Invoke.MethodType * int[] -> Java.Lang.Invoke.MethodHandle

매개 변수

target
MethodHandle

인수가 다시 정렬된 후 호출할 메서드 핸들

newType
MethodType

새 메서드 핸들의 예상 형식

reorder
Int32[]

다시 정렬을 제어하는 인덱스 배열

반환

사용되지 않는 인수를 삭제하고 다른 인수를 이동하거나 복제한 후 대상에 위임하는 메서드 핸들입니다.

특성

설명

인수를 다시 정렬하여 지정된 메서드 핸들의 호출 시퀀스를 새 형식으로 조정하는 메서드 핸들을 생성합니다. 결과 메서드 핸들은 원하는 새 형식과 동일한 형식을 보고하도록 보장됩니다.

지정된 배열이 다시 정렬을 제어합니다. #I 들어오는 매개 변수의 수(값newType.parameterCount())를 호출하고 나가는 매개 변수의 수(값target.type().parameterCount())를 호출 #O 합니다. 그런 다음 다시 정렬 배열의 길이는 여야 #O하며 각 요소는 음수가 아닌 숫자 #I여야 합니다. 보다 #O작은 모든 N 경우 -th 나가는 인수는 들어오는 -th 인수에서 I가져옵니다 I reorder[N].N

인수 또는 반환 값 변환이 적용되지 않습니다. 각 들어오는 인수의 형식은 대상 newType메서드 핸들에 있는 해당 나가는 매개 변수 또는 매개 변수의 형식과 동일해야 합니다. 반환 형식 newType 은 원래 대상의 반환 형식과 동일해야 합니다.

다시 정렬 배열은 실제 순열을 지정할 필요가 없습니다. 인덱스가 배열에 두 번 이상 나타나면 들어오는 인수가 중복되고, 인덱스가 배열에 나타나지 않으면 들어오는 인수가 삭제됩니다. 의 경우 #dropArguments(MethodHandle,int,List) dropArguments와 같이 다시 정렬 배열에 언급되지 않은 들어오는 인수는 모든 형식 newType일 수 있습니다. <blockquote>

{@code
            import static java.lang.invoke.MethodHandles.*;
            import static java.lang.invoke.MethodType.*;
            ...
            MethodType intfn1 = methodType(int.class, int.class);
            MethodType intfn2 = methodType(int.class, int.class, int.class);
            MethodHandle sub = ... (int x, int y) -> (x-y) ...;
            assert(sub.type().equals(intfn2));
            MethodHandle sub1 = permuteArguments(sub, intfn2, 0, 1);
            MethodHandle rsub = permuteArguments(sub, intfn2, 1, 0);
            assert((int)rsub.invokeExact(1, 100) == 99);
            MethodHandle add = ... (int x, int y) -> (x+y) ...;
            assert(add.type().equals(intfn2));
            MethodHandle twice = permuteArguments(add, intfn1, 0, 0);
            assert(twice.type().equals(intfn1));
            assert((int)twice.invokeExact(21) == 42);
            }

</blockquote>

에 대한 java.lang.invoke.MethodHandles.permuteArguments(java.lang.invoke.MethodHandle, java.lang.invoke.MethodType, int...)Java 설명서

이 페이지의 일부는 Android 오픈 소스 프로젝트에서 만들고 공유하고 Creative Commons 2.5 특성 라이선스에 설명된 용어에 따라 사용되는 작업을 기반으로 하는 수정 사항입니다.

적용 대상