MethodHandle.AsCollector Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Überlädt
AsCollector(Class, Int32) |
Erstellt einen <Em-Array-Collecting></Em-Methodenhandle>, der eine bestimmte Anzahl von nachfolgenden Positionsargumenten akzeptiert und in einem Arrayargument sammelt. |
AsCollector(Int32, Class, Int32) |
Erstellt einen <Em-Arraysammlungs><-/Em-Methodenziehpunkt>, der eine bestimmte Anzahl von Positionsargumenten akzeptiert, die an einer bestimmten Position beginnen, und sammelt sie in einem Arrayargument. |
AsCollector(Class, Int32)
Erstellt einen <Em-Array-Collecting></Em-Methodenhandle>, der eine bestimmte Anzahl von nachfolgenden Positionsargumenten akzeptiert und in einem Arrayargument sammelt.
[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
Parameter
- arrayType
- Class
häufig Object[]
, der Typ des Arrayarguments, das die Argumente sammelt
- arrayLength
- Int32
die Anzahl der Argumente, die in einem neuen Arrayargument gesammelt werden sollen
Gibt zurück
ein neues Methodenhandle, das einige nachfolgende Argumente in einem Array sammelt, bevor der ursprüngliche Methodenhandle aufgerufen wird
- Attribute
Hinweise
Erstellt einen <Em-Array-Collecting></Em-Methodenhandle>, der eine bestimmte Anzahl von nachfolgenden Positionsargumenten akzeptiert und in einem Arrayargument sammelt. Das neue Methodenhandle passt sich als Ziel an den aktuellen Methodenhandle an. Der Typ des Adapters entspricht dem Typ des Ziels, mit der Ausnahme, dass ein einzelner nachgestellter Parameter (in der Regel vom Typ arrayType
) durch arrayLength
Parameter ersetzt wird, deren Typ elementtyp ist arrayType
.
Wenn sich der Arraytyp vom endgültigen Argumenttyp des ursprünglichen Ziels unterscheidet, wird das ursprüngliche Ziel so angepasst, dass der Arraytyp direkt verwendet wird, als wäre es durch einen Aufruf von #asType asType
.
Wenn der Adapter aufgerufen wird, ersetzt der Adapter seine nachfolgenden arrayLength
Argumente durch ein einzelnes neues Array vom Typ arrayType
, dessen Elemente (in der Reihenfolge) die ersetzten Argumente umfassen. Schließlich wird das Ziel aufgerufen. Was das Ziel schließlich zurückgibt, wird vom Adapter unverändert zurückgegeben.
(Das Array kann auch eine freigegebene Konstante sein, wenn arrayLength
null ist.)
(<em>Hinweis:</em> Dies arrayType
ist häufig identisch mit dem letzten Parametertyp des ursprünglichen Ziels. Es handelt sich um ein explizites Argument für die Symmetrie mit asSpreader
, und es dem Ziel auch zu ermöglichen, einen einfachen Object
als letzten Parametertyp zu verwenden.)
Um einen Sammlungsadapter zu erstellen, der nicht auf eine bestimmte Anzahl gesammelter Argumente beschränkt ist, verwenden Sie #asVarargsCollector asVarargsCollector
stattdessen.
Hier sind einige Beispiele für Arraysammlungsmethodenhandles: <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-Dokumentation für java.lang.invoke.MethodHandle.asCollector(java.lang.Class<?>, int)
.
Teile dieser Seite sind Änderungen auf der Grundlage von Arbeiten, die vom Android Open Source-Projekt erstellt und freigegeben werden und gemäß den in der Creative Commons 2.5 Attribution License beschriebenen Begriffen verwendet werden.
Gilt für:
AsCollector(Int32, Class, Int32)
Erstellt einen <Em-Arraysammlungs><-/Em-Methodenziehpunkt>, der eine bestimmte Anzahl von Positionsargumenten akzeptiert, die an einer bestimmten Position beginnen, und sammelt sie in einem Arrayargument.
[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
Parameter
- collectArgPos
- Int32
die nullbasierte Position in der Parameterliste, an der das Sammeln beginnen soll.
- arrayType
- Class
häufig Object[]
, der Typ des Arrayarguments, das die Argumente sammelt
- arrayLength
- Int32
die Anzahl der Argumente, die in einem neuen Arrayargument gesammelt werden sollen
Gibt zurück
ein neues Methodenhandle, das einige Argumente in einem Array sammelt, bevor der ursprüngliche Methodenhandle aufgerufen wird
- Attribute
Hinweise
Erstellt einen <Em-Arraysammlungs><-/Em-Methodenziehpunkt>, der eine bestimmte Anzahl von Positionsargumenten akzeptiert, die an einer bestimmten Position beginnen, und sammelt sie in einem Arrayargument. Das neue Methodenhandle passt sich als Ziel an den aktuellen Methodenhandle an. Der Typ des Adapters entspricht dem Typ des Ziels, mit der Ausnahme, dass der Parameter an der position, die durch collectArgPos
(in der Regel vom Typ arrayType
) angegeben ist, durch arrayLength
Parameter ersetzt wird, deren Typ elementtyp ist arrayType
.
Diese Methode verhält sich sehr ähnlich #asCollector(Class, int)
, unterscheidet sich jedoch darin, dass das collectArgPos
Argument angibt, an welcher Position in den Parameterlistenargumenten gesammelt werden soll. Dieser Index ist nullbasiert.
Hinzugefügt in 9.
Java-Dokumentation für java.lang.invoke.MethodHandle.asCollector(int, java.lang.Class<?>, int)
.
Teile dieser Seite sind Änderungen auf der Grundlage von Arbeiten, die vom Android Open Source-Projekt erstellt und freigegeben werden und gemäß den in der Creative Commons 2.5 Attribution License beschriebenen Begriffen verwendet werden.