Language

MethodHandle.AsCollector メソッド

定義

オーバーロード

名前 説明
AsCollector(Class, Int32)

<em>array-collecting</em> メソッド ハンドルを作成します。これは、指定された数の後続の位置引数を受け取り、それらを配列引数に収集します。

AsCollector(Int32, Class, Int32)

<em>array-collecting</em> メソッド ハンドルを作成します。これは、特定の位置から始まる指定された数の位置引数を受け取り、それらを配列引数に収集します。

AsCollector(Class, Int32)

<em>array-collecting</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>array-collecting</em> メソッド ハンドルを作成します。これは、指定された数の後続の位置引数を受け取り、それらを配列引数に収集します。 新しいメソッド ハンドルは、現在のメソッド ハンドルを ターゲットとして適応させます。 アダプターの型はターゲットの型と同じですが、1 つの末尾のパラメーター (通常はarrayType型) が、arrayTypeの要素型であるarrayLengthパラメーターに置き換えられる点が異なります。

配列型が元のターゲットの最終的な引数型と異なる場合、元のターゲットは、 #asType asTypeの呼び出しのように配列型を直接受け取るように調整されます。

呼び出されると、アダプターは後続の arrayLength 引数を、置き換えられた引数を要素が (順番に) 構成する、 arrayType型の単一の新しい配列に置き換えます。 最後に、ターゲットが呼び出されます。 ターゲットから最終的に返されるものは、アダプターによって変更されずに返されます。

( arrayLength が 0 の場合、配列は共有定数になる場合もあります)。

(<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ドキュメント。

このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。

適用対象

AsCollector(Int32, Class, Int32)

<em>array-collecting</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>array-collecting</em> メソッド ハンドルを作成します。これは、特定の位置から始まる指定された数の位置引数を受け取り、それらを配列引数に収集します。 新しいメソッド ハンドルは、現在のメソッド ハンドルを ターゲットとして適応させます。 アダプターの型はターゲットの型と同じになります。ただし、collectArgPos (通常は型arrayType) で示される位置にあるパラメーターが、arrayTypeの要素型であるarrayLengthパラメーターに置き換えられる点が異なります。

このメソッドは #asCollector(Class, int)とよく似ていますが、 collectArgPos 引数はパラメーター リスト引数のどの位置で収集するかを示す点が異なります。 このインデックスは 0 から始まります。

9 に追加されました。

Javaドキュメント。

このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。

適用対象