MethodHandles.PermuteArguments(MethodHandle, MethodType, Int32[]) 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
인수를 다시 정렬하여 지정된 메서드 핸들의 호출 시퀀스를 새 형식으로 조정하는 메서드 핸들을 생성합니다.
[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>
이 페이지의 일부는 Android 오픈 소스 프로젝트에서 만들고 공유하고 Creative Commons 2.5 특성 라이선스에 설명된 용어에 따라 사용되는 작업을 기반으로 하는 수정 사항입니다.