MethodHandles.FoldArguments 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
오버로드
FoldArguments(MethodHandle, Int32, MethodHandle) |
특정 위치에서 시작하여 인수 중 일부를 미리 처리한 다음 접힌 인수 바로 앞에 원래 인수 시퀀스에 삽입된 사전 처리 결과로 대상을 호출하여 대상 메서드 핸들을 조정합니다. |
FoldArguments(MethodHandle, MethodHandle) |
인수 중 일부를 미리 처리한 다음, 인수의 원래 시퀀스에 삽입된 사전 처리 결과로 대상을 호출하여 대상 메서드 핸들을 조정합니다. |
FoldArguments(MethodHandle, Int32, MethodHandle)
특정 위치에서 시작하여 인수 중 일부를 미리 처리한 다음 접힌 인수 바로 앞에 원래 인수 시퀀스에 삽입된 사전 처리 결과로 대상을 호출하여 대상 메서드 핸들을 조정합니다.
[Android.Runtime.Register("foldArguments", "(Ljava/lang/invoke/MethodHandle;ILjava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=33)]
public static Java.Lang.Invoke.MethodHandle? FoldArguments (Java.Lang.Invoke.MethodHandle? target, int pos, Java.Lang.Invoke.MethodHandle? combiner);
[<Android.Runtime.Register("foldArguments", "(Ljava/lang/invoke/MethodHandle;ILjava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=33)>]
static member FoldArguments : Java.Lang.Invoke.MethodHandle * int * Java.Lang.Invoke.MethodHandle -> Java.Lang.Invoke.MethodHandle
매개 변수
- target
- MethodHandle
인수가 결합된 후 호출할 메서드 핸들
- pos
- Int32
접기를 시작하고 접기 결과를 삽입할 위치입니다. 이 0
경우 효과의 경우와 같습니다 #foldArguments(MethodHandle, MethodHandle)
.
- combiner
- MethodHandle
들어오는 인수에서 처음에 호출하는 메서드 핸들
반환
지정된 인수 접기 논리를 통합하는 메서드 핸들
- 특성
설명
특정 위치에서 시작하여 인수 중 일부를 미리 처리한 다음 접힌 인수 바로 앞에 원래 인수 시퀀스에 삽입된 사전 처리 결과로 대상을 호출하여 대상 메서드 핸들을 조정합니다.
이 메서드는 밀접하게 관련 #foldArguments(MethodHandle, MethodHandle)
되어 있지만 폴딩이 수행되는 매개 변수 목록의 위치를 제어할 수 있습니다. 이를 pos
제어하는 인수는 0부터 시작하는 인덱스입니다. 앞서 언급한 메서드 #foldArguments(MethodHandle, MethodHandle)
는 위치 0을 가정합니다.
9에 추가되었습니다.
이 페이지의 일부는 Android 오픈 소스 프로젝트에서 만들고 공유하고 Creative Commons 2.5 특성 라이선스에 설명된 용어에 따라 사용되는 작업을 기반으로 하는 수정 사항입니다.
적용 대상
FoldArguments(MethodHandle, MethodHandle)
인수 중 일부를 미리 처리한 다음, 인수의 원래 시퀀스에 삽입된 사전 처리 결과로 대상을 호출하여 대상 메서드 핸들을 조정합니다.
[Android.Runtime.Register("foldArguments", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)]
public static Java.Lang.Invoke.MethodHandle? FoldArguments (Java.Lang.Invoke.MethodHandle? target, Java.Lang.Invoke.MethodHandle? combiner);
[<Android.Runtime.Register("foldArguments", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)>]
static member FoldArguments : Java.Lang.Invoke.MethodHandle * Java.Lang.Invoke.MethodHandle -> Java.Lang.Invoke.MethodHandle
매개 변수
- target
- MethodHandle
인수가 결합된 후 호출할 메서드 핸들
- combiner
- MethodHandle
들어오는 인수에서 처음에 호출하는 메서드 핸들
반환
지정된 인수 접기 논리를 통합하는 메서드 핸들
- 특성
설명
인수 중 일부를 미리 처리한 다음, 인수의 원래 시퀀스에 삽입된 사전 처리 결과로 대상을 호출하여 대상 메서드 핸들을 조정합니다.
사전 처리는 두 번째 메서드 핸들에 의해 combiner
수행됩니다. 어댑터에 전달된 인수 중 첫 번째 N
인수가 결합자로 복사된 후 호출됩니다. (여기서 N
는 결합자의 매개 변수 수로 정의됩니다.) 그런 다음 컨트롤이 대상에 전달되고 결합자의 결과가 원래 N
들어오는 인수 앞에 삽입됩니다.
결합자에서 값을 반환하는 경우 대상의 첫 번째 매개 변수 형식은 결합자의 반환 형식과 동일해야 하며 대상의 다음 N
매개 변수 형식은 결합자의 매개 변수와 정확히 일치해야 합니다.
결합자의 void 반환이 있으면 결과가 삽입되지 않으며 대상의 첫 번째 N
매개 변수 형식은 결합자의 매개 변수와 정확히 일치해야 합니다.
결과 어댑터는 결합자의 결과에 해당하는 경우 첫 번째 매개 변수 형식이 삭제된다는 점을 제외하고 대상과 동일한 형식입니다.
(결합 #dropArguments(MethodHandle,int,List) dropArguments
자 또는 대상이 수신하지 않으려는 인수를 제거하는 데 사용할 수 있습니다. 들어오는 인수 중 일부가 결합자 전용인 경우 해당 인수가 대상 항목의 스택에 있을 필요가 없으므로 대신 사용하는 MethodHandle#asCollector asCollector
것이 좋습니다.)
<b>예제:</b><blockquote>
{@code
import static java.lang.invoke.MethodHandles.*;
import static java.lang.invoke.MethodType.*;
...
MethodHandle trace = publicLookup().findVirtual(java.io.PrintStream.class,
"println", methodType(void.class, String.class))
.bindTo(System.out);
MethodHandle cat = lookup().findVirtual(String.class,
"concat", methodType(String.class, String.class));
assertEquals("boojum", (String) cat.invokeExact("boo", "jum"));
MethodHandle catTrace = foldArguments(cat, trace);
// also prints "boo":
assertEquals("boojum", (String) catTrace.invokeExact("boo", "jum"));
}
</blockquote>
결과 어댑터의 의사 코드는 다음과 같습니다. 코드 T
에서 결과 어댑터의 target
결과 형식을 나타냅니다. V
/v
는 폴딩 위치 V
앞에 있는 매개 변수의 target
형식과 값을 나타내며, 또한 해당 매개 변수의 combiner
결과 형식이기도 합니다. A
/a
는 폴딩 위치에 있는 매개 변수 및 인수의 N
형식과 값을 나타냅니다. B
/b
는 접힌 매개 변수 및 인수 뒤에 target
있는 매개 변수 및 인수의 형식과 값을 나타냅니다. <blockquote>
{@code
// there are N arguments in A...
T target(V, A[N]..., B...);
V combiner(A...);
T adapter(A... a, B... b) {
V v = combiner(a...);
return target(v, a..., b...);
}
// and if the combiner has a void return:
T target2(A[N]..., B...);
void combiner2(A...);
T adapter2(A... a, B... b) {
combiner2(a...);
return target2(a..., b...);
}
}
</blockquote>
<em>Note:</em> 결과 어댑터는 원래 대상 메서드 핸들이더라도 MethodHandle#asVarargsCollector 변수-arity 메서드 핸들이 되지 않습니다.
이 페이지의 일부는 Android 오픈 소스 프로젝트에서 만들고 공유하고 Creative Commons 2.5 특성 라이선스에 설명된 용어에 따라 사용되는 작업을 기반으로 하는 수정 사항입니다.