다음을 통해 공유


MethodHandle.AsCollector 메서드

정의

오버로드

AsCollector(Class, Int32)

<지정된 수의 후행 위치 인수를 허용하고< 배열 인수로 수집하는 em>배열 수집/em> 메서드 핸들을 만듭니다.

AsCollector(Int32, Class, Int32)

<지정된 위치에서 시작하는 지정된 수의 위치 인수를 수락하고< 배열 인수로 수집하는 em>배열 수집/em> 메서드 핸들을 만듭니다.

AsCollector(Class, Int32)

<지정된 수의 후행 위치 인수를 허용하고< 배열 인수로 수집하는 em>배열 수집/em> 메서드 핸들을 만듭니다.

[Android.Runtime.Register("asCollector", "(Ljava/lang/Class;I)Ljava/lang/invoke/MethodHandle;", "GetAsCollector_Ljava_lang_Class_IHandler", ApiSince=26)]
public virtual Java.Lang.Invoke.MethodHandle? AsCollector (Java.Lang.Class? arrayType, int arrayLength);
[<Android.Runtime.Register("asCollector", "(Ljava/lang/Class;I)Ljava/lang/invoke/MethodHandle;", "GetAsCollector_Ljava_lang_Class_IHandler", ApiSince=26)>]
abstract member AsCollector : Java.Lang.Class * int -> Java.Lang.Invoke.MethodHandle
override this.AsCollector : Java.Lang.Class * int -> Java.Lang.Invoke.MethodHandle

매개 변수

arrayType
Class

종종 Object[]인수를 수집할 배열 인수의 형식입니다.

arrayLength
Int32

새 배열 인수로 수집할 인수 수

반환

원래 메서드 핸들을 호출하기 전에 배열에 일부 후행 인수를 수집하는 새 메서드 핸들

특성

설명

<지정된 수의 후행 위치 인수를 허용하고< 배열 인수로 수집하는 em>배열 수집/em> 메서드 핸들을 만듭니다. 새 메서드 핸들은 현재 메서드 핸들을 대상으로 조정합니다. 어댑터의 형식은 단일 후행 매개 변수(일반적으로 형식 arrayType)가 요소 형식인 매개 변수로 arrayLength 대체된다는 점을 제외하고 대상 형식과 arrayType동일합니다.

배열 형식이 원래 대상의 최종 인수 형식과 다른 경우 원래 대상은 호출 #asType asType을 통해 배열 형식을 직접 사용하도록 조정됩니다.

호출될 때 어댑터는 후행 인수를 arrayLength 요소가 대체된 인수로 구성되는 단일 새 형식 arrayType배열로 바꿉니다. 마지막으로 대상이 호출됩니다. 대상에서 반환하는 항목은 어댑터에 의해 변경되지 않고 반환됩니다.

(0인 경우 arrayLength 배열은 공유 상수일 수도 있습니다.)

(<em>Note:</em> 원래 arrayType 대상의 마지막 매개 변수 형식과 동일한 경우가 많습니다. 대칭 asSpreader에 대한 명시적 인수이며 대상이 단순 Object 매개 변수 형식으로 사용할 수 있도록 허용합니다.)

수집된 인수의 특정 수로 제한되지 않는 수집 어댑터를 만들려면 대신 사용합니다 #asVarargsCollector asVarargsCollector .

다음은 배열 수집 메서드 핸들의 몇 가지 예입니다 <. blockquote>

{@code
            MethodHandle deepToString = publicLookup()
              .findStatic(Arrays.class, "deepToString", methodType(String.class, Object[].class));
            assertEquals("[won]",   (String) deepToString.invokeExact(new Object[]{"won"}));
            MethodHandle ts1 = deepToString.asCollector(Object[].class, 1);
            assertEquals(methodType(String.class, Object.class), ts1.type());
            //assertEquals("[won]", (String) ts1.invokeExact(         new Object[]{"won"})); //FAIL
            assertEquals("[[won]]", (String) ts1.invokeExact((Object) new Object[]{"won"}));
            // arrayType can be a subtype of Object[]
            MethodHandle ts2 = deepToString.asCollector(String[].class, 2);
            assertEquals(methodType(String.class, String.class, String.class), ts2.type());
            assertEquals("[two, too]", (String) ts2.invokeExact("two", "too"));
            MethodHandle ts0 = deepToString.asCollector(Object[].class, 0);
            assertEquals("[]", (String) ts0.invokeExact());
            // collectors can be nested, Lisp-style
            MethodHandle ts22 = deepToString.asCollector(Object[].class, 3).asCollector(String[].class, 2);
            assertEquals("[A, B, [C, D]]", ((String) ts22.invokeExact((Object)'A', (Object)"B", "C", "D")));
            // arrayType can be any primitive array type
            MethodHandle bytesToString = publicLookup()
              .findStatic(Arrays.class, "toString", methodType(String.class, byte[].class))
              .asCollector(byte[].class, 3);
            assertEquals("[1, 2, 3]", (String) bytesToString.invokeExact((byte)1, (byte)2, (byte)3));
            MethodHandle longsToString = publicLookup()
              .findStatic(Arrays.class, "toString", methodType(String.class, long[].class))
              .asCollector(long[].class, 1);
            assertEquals("[123]", (String) longsToString.invokeExact((long)123));
            }

</blockquote>

에 대한 java.lang.invoke.MethodHandle.asCollector(java.lang.Class<?>, int)Java 설명서

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

적용 대상

AsCollector(Int32, Class, Int32)

<지정된 위치에서 시작하는 지정된 수의 위치 인수를 수락하고< 배열 인수로 수집하는 em>배열 수집/em> 메서드 핸들을 만듭니다.

[Android.Runtime.Register("asCollector", "(ILjava/lang/Class;I)Ljava/lang/invoke/MethodHandle;", "GetAsCollector_ILjava_lang_Class_IHandler", ApiSince=33)]
public virtual Java.Lang.Invoke.MethodHandle? AsCollector (int collectArgPos, Java.Lang.Class? arrayType, int arrayLength);
[<Android.Runtime.Register("asCollector", "(ILjava/lang/Class;I)Ljava/lang/invoke/MethodHandle;", "GetAsCollector_ILjava_lang_Class_IHandler", ApiSince=33)>]
abstract member AsCollector : int * Java.Lang.Class * int -> Java.Lang.Invoke.MethodHandle
override this.AsCollector : int * Java.Lang.Class * int -> Java.Lang.Invoke.MethodHandle

매개 변수

collectArgPos
Int32

수집을 시작할 매개 변수 목록의 위치(0부터 시작)입니다.

arrayType
Class

종종 Object[]인수를 수집할 배열 인수의 형식입니다.

arrayLength
Int32

새 배열 인수로 수집할 인수 수

반환

원래 메서드 핸들을 호출하기 전에 일부 인수를 배열로 수집하는 새 메서드 핸들

특성

설명

<지정된 위치에서 시작하는 지정된 수의 위치 인수를 수락하고< 배열 인수로 수집하는 em>배열 수집/em> 메서드 핸들을 만듭니다. 새 메서드 핸들은 현재 메서드 핸들을 대상으로 조정합니다. 어댑터의 형식은 대상의 형식과 동일합니다. 단, 일반적으로 형식으로 표시된 collectArgPos 위치에 있는 매개 변수는 해당 형식arrayType이 요소 형식arrayType인 매개 변수로 arrayLength 바뀝니다.

이 메서드는 매우 비슷하 #asCollector(Class, int)게 동작하지만 해당 인수가 매개 변수 목록 인수의 위치를 수집해야 하는 위치를 나타낸다는 점에서 collectArgPos 다릅니다. 이 인덱스는 0부터 시작하는 인덱스입니다.

9에 추가되었습니다.

에 대한 java.lang.invoke.MethodHandle.asCollector(int, java.lang.Class<?>, int)Java 설명서

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

적용 대상