MethodHandle.AsCollector 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
多載
| 名稱 | Description |
|---|---|
| AsCollector(Class, Int32) |
建立一個 <em>陣列收集</em> 方法的 handle,接受一定數量的後方位置參數並將它們收集成一個陣列參數。 |
| AsCollector(Int32, Class, Int32) |
製作一個 <em>陣列收集</em> 方法的 handle,接受從某一位置開始的指定數量位置參數,並將其收集成陣列參數。 |
AsCollector(Class, Int32)
建立一個 <em>陣列收集</em> 方法的 handle,接受一定數量的後方位置參數並將它們收集成一個陣列參數。
[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> 方法的 handle,接受一定數量的後方位置參數並將它們收集成一個陣列參數。 新方法的 handle 會以現有的方法 handle 作為 其目標。 適配器的類型與目標的類型相同,但將單一後置參數(通常為類型 arrayType)替換為 arrayLength 元素型 arrayType別的參數。
若陣列類型與原始目標的最終參數類型不同,原始目標會被調整為直接取陣列類型,就像呼叫 。#asType asType
當被呼叫時,介面卡會將後方 arrayLength 的參數替換為一個新的陣列,型別 arrayType為 ,該陣列的元素依序組成被替換的參數。 最後,目標被叫到。 目標最終回傳的訊號會被轉接器不做更改地回傳。
(當 為零時 arrayLength ,陣列也可能是共享常數。)
(<em>註:</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));
}
</區塊引用>
的 java.lang.invoke.MethodHandle.asCollector(java.lang.Class<?>, int)Java 檔。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
適用於
AsCollector(Int32, Class, Int32)
製作一個 <em>陣列收集</em> 方法的 handle,接受從某一位置開始的指定數量位置參數,並將其收集成陣列參數。
[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
參數列表中以零為基礎的位置,從此開始收集。
- arrayType
- Class
通常 Object[]是陣列參數的類型,該參數將收集參數
- arrayLength
- Int32
要收集到新陣列參數的參數數量
傳回
一個新的方法句柄,該代號會收集部分參數到陣列中,然後再呼叫原始方法代柄
- 屬性
備註
製作一個 <em>陣列收集</em> 方法的 handle,接受從某一位置開始的指定數量位置參數,並將其收集成陣列參數。 新方法的 handle 會以現有的方法 handle 作為 其目標。 適配器的類型與目標的類型相同,但位置的參數 collectArgPos (通常為 arrayType類型)被替換為 arrayLength 元素型別 arrayType的參數。
此方法的行為與 非常相似 #asCollector(Class, int),但不同之處在於其 collectArgPos 參數會指示參數列表中應收集參數的位置。 此指數為零基。
新增9。
的 java.lang.invoke.MethodHandle.asCollector(int, java.lang.Class<?>, int)Java 檔。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。