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> メソッド ハンドルを作成します。 新しいメソッド ハンドルは、現在のメソッド ハンドルを ターゲットとして適応させます。 アダプターの型はターゲットの型と同じになりますが、1 つの末尾のパラメーター (通常は型) が要素arrayType
型arrayType
のパラメーターにarrayLength
置き換えられる点が異なります。
配列型が元のターゲットの最終的な引数型と異なる場合、元のターゲットは、配列型を直接受け #asType asType
取るように調整されます。
呼び出されると、アダプターは後続 arrayLength
の引数を型の単一の arrayType
新しい配列に置き換えます。この配列の要素は、置換された引数を順番に構成します。 最後に、ターゲットが呼び出されます。 ターゲットから最終的に返されるものは、アダプターによって変更されずに返されます。
(配列は、0 の場合 arrayLength
は共有定数でもかまいません)。
(<em>Note:</em> The 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 ドキュメントjava.lang.invoke.MethodHandle.asCollector(java.lang.Class<?>, int)
このページの一部は、Android オープンソース プロジェクトによって作成および共有され、クリエイティブ コモンズ 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 ドキュメントjava.lang.invoke.MethodHandle.asCollector(int, java.lang.Class<?>, int)
このページの一部は、Android オープンソース プロジェクトによって作成および共有され、クリエイティブ コモンズ 2.5 属性ライセンスに記載されている条件に従って使用される作業に基づく変更です。