MethodHandle.AsCollector 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
오버로드
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 특성 라이선스에 설명된 용어에 따라 사용되는 작업을 기반으로 하는 수정 사항입니다.