다음을 통해 공유


MethodHandles.FoldArguments 메서드

정의

오버로드

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에 추가되었습니다.

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

이 페이지의 일부는 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 메서드 핸들이 되지 않습니다.

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

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

적용 대상