MethodHandles.IteratedLoop(MethodHandle, MethodHandle, MethodHandle) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
によって生成される値を範囲とするループを 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
のループ 反復変数に格納されます。
ハンドルが body
非void
型を返す場合は、その型 V
の先頭ループ反復変数も存在します。 この変数は、省略可能な init
ハンドルを使用して初期化されます。または、そのハンドルが の場合 #empty 既定値の 型 V
に null
初期化されます。
各イテレーションでは、イテレーション変数がハンドルの呼び出しに 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
すことをvoid
V
理解して書き込(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>ハンドルが iterator
非null
の場合は、戻り値の型 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>
Iterator
iteratedLoop
に対するメソッド ハンドル表現で消去されるため、結合子は、変換メソッドの場合と同様に、 のbody
先頭の引数の型を MethodHandle#asType asType
にObject
調整します。 したがって、ループの実行時に間違った型の反復子が表示される場合は、 によって 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 に追加されました。
このページの一部は、によって作成および共有された作業に基づく変更であり、に記載されている条件に従って使用されます。