MethodHandles.IteratedLoop(MethodHandle, MethodHandle, MethodHandle) メソッド

定義

によって生成される値を範囲とするループを 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

パラメーター

iterator
MethodHandle

ループを開始する反復子を返す省略可能なハンドル。 以外のnull場合、ハンドルは または サブタイプを返す java.util.Iterator 必要があります。 その他の制約については、上記を参照してください。

init
MethodHandle

省略可能な初期化子。ループ変数の初期値を指定します。 は、 nullで、既定値を意味します。 その他の制約については、上記を参照してください。

body
MethodHandle

ループの本体。これは ではない null可能性があります。 これは、標準ケースのループ パラメーターと結果の型を制御します (詳細については、上記を参照してください)。 独自の戻り値の型 (void 以外の場合) と T パラメーター (反復処理された値の場合) を受け入れる必要があり、任意の数の追加型を受け入れる場合があります。 その他の制約については、上記を参照してください。

戻り値

反復ループ機能を具体化するメソッド ハンドル。

属性

注釈

によって生成される値を範囲とするループを Iterator<T>構築します。 これは、#loop(MethodHandle[][]) ジェネリック ループ 結合子の便利なラッパーです。

反復子自体は、ハンドルの iterator 評価によって決定されます。 生成される各値は、 型 Tのループ 反復変数に格納されます。

ハンドルが bodyvoid 型を返す場合は、その型 Vの先頭ループ反復変数も存在します。 この変数は、省略可能な init ハンドルを使用して初期化されます。または、そのハンドルが の場合 #empty 既定値の 型 Vnull初期化されます。

各イテレーションでは、イテレーション変数がハンドルの呼び出しに body 渡されます。 本体から返される非void 値 (型 V) は、先頭の反復変数を更新します。 ループ ハンドルの実行の結果は、その変数の最終的な V 値になります (または void 変数がない V 場合)。

引数 handles:ul>li に対する次の規則は保持されます。ハンドルは body であるnull必要があります。その型は 形式である必要があります。ここでV、 は非voidであるか、それ以外の場合(T A...)voidは である必要があります(V T A...)V。><< (この場合はvoid、 という名前Vに型voidを割り当てます。型はパラメーター リストから静かに削除され、 を残 <(T A...)VすことをvoidV理解して書き込(V T A...)Vみます)。li>本文のパラメーター リスト(V T A...)は、em 内部パラメーター リスト/em>> と呼ばれる<型のリスト<に寄与します。 他のループ 部分のパラメーター リストが制約されます。 <li>特殊なケースとして、本文がおよび型のみをV提供しT、追加Aの型がない場合、内部パラメーター リストはハンドルのiterator引数型A...によって拡張されます。単一の型Iterableである場合はnull、リストをA...構成します。 <li>反復変数の型(V T)が内部パラメーター リストから削除された場合、結果の短いリスト(A...)は em>外部パラメーター リスト</em> と呼ばれます<。 <li>本文の戻り値の型 V(以外のvoid場合) は、ループの追加状態変数の型を決定します。 本文では、先頭パラメーターを受け取り、この型 Vの値を返す必要があります。 <li>が 以外のnull場合initは、戻り値の型 Vが必要です。 そのパラメーター リスト (何らかの形式 <の c>(A*)</c>) は、外部パラメーター リスト (A...)と実質的に同じである必要があります。 <li>が のnull場合init、ループ変数は #empty の既定値に初期化されます。 <li>ハンドルが iteratornullの場合は、戻り値の型 java.util.Iterator またはそのサブタイプが必要です。 ループの実行時に生成される反復子は、 型 Tに変換できる値を生成すると見なされます。 <li>(null 何らかの形式(A*)の ) 以外の の iterator パラメーター リストは、外部パラメーター リスト(A...)と実質的に同じである必要があります。 <li>の場合 iterator 、既定値は null のように java.lang.Iterable#iterator()動作するメソッド ハンドルになります。 その場合、内部パラメーター リスト(V T A...)には少なくとも 1 つのA型が必要です。既定の反復子ハンドル パラメーターは、変換メソッドのようにMethodHandle#asType asType先頭Aの型を受け入れるように調整されます。 先頭 A の型は、 Iterable またはそのサブタイプである必要があります。 この変換ステップは、ループ構築時に実行され、 を WrongMethodTypeExceptionスローしてはなりません。 </ul>

T は、プリミティブまたは参照のいずれかになります。 型は生の型Iterator<T>IteratoriteratedLoopに対するメソッド ハンドル表現で消去されるため、結合子は、変換メソッドの場合と同様に、 のbody先頭の引数の型を MethodHandle#asType asTypeObject調整します。 したがって、ループの実行時に間違った型の反復子が表示される場合は、 によって MethodHandle#asType(MethodType)実行される動的変換の結果としてランタイム例外が発生する可能性があります。

結果のループ ハンドルの結果の型とパラメーターシグネチャは、次のように決定されます:<ul<>li>ループ ハンドルの結果の型は、本文の結果の型Vです。 <li>ループ ハンドルのパラメーター型は、外部パラメーター リストの 型 (A...)です。 </ul>

結果のループ ハンドルの擬似コードを次に示します。 コードでは、 V/v ループ変数の型/値とループの結果型を表し、 T/tループが反復処理する構造体の要素の型を表し A.../a... 、ループに渡される引数を表します。 <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>

9 に追加されました。

java.lang.invoke.MethodHandles.iteratedLoop(java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle)Java ドキュメント。

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

適用対象