MethodHandles.IteratedLoop(MethodHandle, MethodHandle, MethodHandle) 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.
Erstellt eine Schleife, die sich über die von einem Iterator<T>.
[Android.Runtime.Register("iteratedLoop", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=33)]
public static Java.Lang.Invoke.MethodHandle? IteratedLoop(Java.Lang.Invoke.MethodHandle? iterator, Java.Lang.Invoke.MethodHandle? init, Java.Lang.Invoke.MethodHandle? body);
[<Android.Runtime.Register("iteratedLoop", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=33)>]
static member IteratedLoop : Java.Lang.Invoke.MethodHandle * Java.Lang.Invoke.MethodHandle * Java.Lang.Invoke.MethodHandle -> Java.Lang.Invoke.MethodHandle
Parameter
- iterator
- MethodHandle
ein optionaler Handle, um den Iterator zurückzugeben, um die Schleife zu starten.
Wenn keinnull Handle vorhanden ist, muss der Handle zurückgegeben java.util.Iterator oder ein Untertyp sein.
Weitere Einschränkungen finden Sie oben.
- init
- MethodHandle
optionaler Initialisierer, der den Anfangswert der Schleifenvariable bereitstellt.
Kann sein null, was einen Standardwert bedeutet. Weitere Einschränkungen finden Sie oben.
- body
- MethodHandle
Textkörper der Schleife, die möglicherweise nicht sein nullkann.
Sie steuert die Schleifenparameter und den Ergebnistyp im Standardfall (details hierzu finden Sie oben).
Er muss seinen eigenen Rückgabetyp (wenn nicht ungültig) sowie einen T Parameter (für die kursierten Werte) akzeptieren und eine beliebige Anzahl zusätzlicher Typen akzeptieren.
Weitere Einschränkungen finden Sie oben.
Gibt zurück
eine Methode, die die Iterationsschleifenfunktionalität emkörpert.
- Attribute
Hinweise
Erstellt eine Schleife, die sich über die von einem Iterator<T>. Dies ist ein Komfortwrapper für den generischen #loop(MethodHandle[][])-Schleifenkombinator.
Der Iterator selbst wird durch die Auswertung des iterator Handles bestimmt. Jeder erzeugte Wert wird in einer Schleifen iterationsvariablen vom Typ Tgespeichert.
Wenn der body Handle einen NichttypvoidVzurückgibt, ist auch eine führende Iterationsvariable dieses Typs vorhanden. Diese Variable wird mit dem optionalen init Handle oder dem #empty Standardwert des Typs V initialisiert, wenn dieses Handle lautet null.
In jeder Iteration werden die Iterationsvariablen an einen Aufruf des body Handles übergeben. Ein nicht vom Textkörper (vom TypV) zurückgegebener Wertvoid aktualisiert die führende Iterationsvariable. Das Ergebnis der Ausführung des Schleifenziehpunkts ist der endgültige V Wert dieser Variablen (oder void wenn keine V Variable vorhanden ist).
Die folgenden Regeln halten für das Argument handles:<ul>><Li Der body Handle darf nicht seinnull; sein Typ muss das Formular (V T A...)Vsein, wobei V es sich nicht um nichtvoid oder sonst (T A...)voidhandelt. (In dem void Fall weisen wir den Typ void dem Namen Vzu, und wir schreiben (V T A...)V mit dem Verständnis, dass ein void Typ V ruhig aus der Parameterliste gelöscht wird, und verlassen (T A...)V.) <li>Die Parameterliste (V T A...) des Textkörpers trägt zu einer Liste der Typen bei, die <als interne>Parameterliste</em> bezeichnet werden. Sie schränkt die Parameterlisten der anderen Schleifenteile ein.
<li>Als Sonderfall, wenn der Textkörper nur V beiträgt und T Typen ohne zusätzliche A Typen, wird die interne Parameterliste durch die Argumenttypen A... des iterator Handles erweitert. Wenn es null sich um den einzelnen Typ Iterable handelt und die A... Liste darstellt.
<li>Wenn die Iterationsvariablentypen (V T) aus der internen Parameterliste verworfen werden, wird die resultierende kürzere Liste (A...) als <em>externe Parameterliste</em> bezeichnet.
<li>Der Rückgabetyp Vdes Textkörpers bestimmt, falls nicht, den Typ einer zusätzlichen Zustandsvariablenvoid der Schleife. Der Textkörper muss sowohl einen führenden Parameter akzeptieren als auch einen Wert dieses Typs Vzurückgeben.
<li>Ist init dies nicht dernull Wert, muss sie den Rückgabetyp Vaufweisen. Die Parameterliste (in form <c>(A*)</c>) muss effektiv mit der externen Parameterliste (A...)identisch sein.
<li>If init is null, the loop variable will be initialized to its #empty default value.
<li>Wenn der iterator Handle nicht istnull, muss er den Rückgabetyp java.util.Iterator oder einen Untertyp davon haben. Der Iterator, der erzeugt wird, wenn die Schleife ausgeführt wird, wird angenommen, dass Werte zurückgegeben werden, die in Typ Tkonvertiert werden können.
<li>Die Parameterliste einer iterator Nicht-null (von irgendeiner Form (A*)) muss effektiv mit der externen Parameterliste (A...)identisch sein.
<li>If iterator is null it defaults to a method handle which behaves like java.lang.Iterable#iterator(). In diesem Fall muss die interne Parameterliste (V T A...) mindestens einen A Typ aufweisen, und der Standard-Iteratorhandle-Parameter wird so angepasst, dass er den führenden A Typ akzeptiert, als wäre die MethodHandle#asType asType Konvertierungsmethode. Der führende A Typ muss oder ein Untertyp davon sein Iterable . Dieser Konvertierungsschritt, der zur Schleifenkonstruktionszeit durchgeführt wurde, darf keinen Auslösen.WrongMethodTypeException
</ul>
Der Typ kann entweder ein Grundtyp T oder ein Verweis sein. Da der Typ Iterator<T> in der Methodenhandle-Darstellung des unformatierten Typs Iteratorgelöscht wird, passt der iteratedLoop Kombinationsmodul den führenden Argumenttyp so an bodyObject , als wäre es durch die MethodHandle#asType asType Konvertierungsmethode. Wenn daher ein Iterator des falschen Typs angezeigt wird, wenn die Schleife ausgeführt wird, können Laufzeit-Ausnahmen als Ergebnis dynamischer Konvertierungen auftreten, die von MethodHandle#asType(MethodType).
Der Ergebnistyp und die Parametersignatur des resultierenden Schleifenziehpunkts werden wie folgt bestimmt:<ul<>Li>Der Ergebnistyp des Schleifenziehpunkts ist der Ergebnistyp V des Textkörpers.
<li>Die Parametertypen des Schleifenhandles sind die Typen (A...)aus der externen Parameterliste.
</ul>
Hier ist pseudocode für den resultierenden Schleifenziehpunkt. Stellen Sie im Code V/v den Typ /Wert der Schleifenvariablen sowie den Ergebnistyp der Schleife dar; T/tdie Der Elemente der Struktur durchlaufen die Schleife und A.../a... stellen Argumente dar, die an die Schleife übergeben werden.
<Blockquote>
{@code
Iterator<T> iterator(A...); // defaults to Iterable::iterator
V init(A...);
V body(V,T,A...);
V iteratedLoop(A... a...) {
Iterator<T> it = iterator(a...);
V v = init(a...);
while (it.hasNext()) {
T t = it.next();
v = body(v, t, a...);
}
return v;
}
}
</blockquote>
Hinzugefügt in 9.
Teile dieser Seite sind Änderungen auf der Grundlage von Arbeiten, die von der Android Open Source Project erstellt und gemeinsam verwendet und gemäß den in der 2.5 Attribution License beschriebenen Begriffen verwendet werden.