MethodHandles.WhileLoop(MethodHandle, MethodHandle, MethodHandle) 方法

定义

while从初始值设定项、正文和谓词构造循环。

[Android.Runtime.Register("whileLoop", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=33)]
public static Java.Lang.Invoke.MethodHandle? WhileLoop(Java.Lang.Invoke.MethodHandle? init, Java.Lang.Invoke.MethodHandle? pred, Java.Lang.Invoke.MethodHandle? body);
[<Android.Runtime.Register("whileLoop", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=33)>]
static member WhileLoop : Java.Lang.Invoke.MethodHandle * Java.Lang.Invoke.MethodHandle * Java.Lang.Invoke.MethodHandle -> Java.Lang.Invoke.MethodHandle

参数

init
MethodHandle

可选初始值设定项,提供循环变量的初始值。 null可能是,表示默认的初始值。 有关其他约束,请参阅上面。

pred
MethodHandle

循环的条件,可能不是 null。 其结果类型必须为 boolean. 有关其他约束,请参阅上面。

body
MethodHandle

循环的正文,可能不是 null。 它控制循环参数和结果类型。 有关其他约束,请参阅上面。

返回

实现循环的方法句柄 while ,如参数所述。

属性

注解

while从初始值设定项、正文和谓词构造循环。 这是 #loop(MethodHandle[][]]) 泛型循环组合器的便利包装器。

pred 柄描述循环条件,以及 body它的正文。 此方法生成的循环将在每个迭代中首先计算谓词,然后执行其主体(如果谓词的计算结果为 true)。 当谓词计算结果为 false (在本例中不会执行正文)后,循环将终止。

init 柄描述附加的可选循环局部变量的初始值。 在每个迭代中,此循环局部变量(如果存在)将传递给 body 该变量,并使用从调用返回的值进行更新。 循环执行的结果将是附加循环局部变量的最终值(如果存在)。

这些参数句柄的以下规则保留:<ul><li>句body柄不得null;其类型必须为窗体(V A...)V,其中为V非,否则(A...)void为非void。 (在本void例中,我们将类型void分配给名称V,我们将通过理解从(V A...)V参数列表中悄悄地删除类型voidV,离开 (A...)V。) <li>正文的参数列表(V A...)称为 <em>内部参数列表</em>。 它将约束其他循环部件的参数列表。 <li>如果从内部参数列表中删除迭代变量类型 V ,则生成的较短列表 (A...) 称为 <em>外部参数列表</em>。 <li>正文返回类型 V(如果不是void)确定循环的其他状态变量的类型。 正文必须同时接受并返回此类型的 V值。 <li>如果 init 不是,null则它必须具有返回类型 V。 其参数列表(某种形式的 <c>(A*)</c>) 必须与外部参数列表 (A...)有效相同。 <li>If init is null, the loop variable will initialized to its #empty default value. <li>句 pred 柄不得 null。 它必须具有 boolean 其返回类型。 其参数列表(空或窗体 (V A*))必须与内部参数列表有效相同。 </ul>

生成的循环句柄的结果类型和参数签名按如下方式确定:<ul<>li>循环句柄的结果类型是正文的结果类型V。 <li>循环句柄的参数类型是外部参数列表中的类型 (A...)。 </ul>

下面是生成的循环句柄的伪代码。 在代码中, V/v 表示唯一循环变量的类型/值以及循环的结果类型;以及 A/a传递给循环的参数的类型/值。 <blockquote>

{@code
            V init(A...);
            boolean pred(V, A...);
            V body(V, A...);
            V whileLoop(A... a...) {
              V v = init(a...);
              while (pred(v, a...)) {
                v = body(v, a...);
              }
              return v;
            }
            }

</blockquote>

已在 9 中添加。

Java文档java.lang.invoke.MethodHandles.whileLoop(java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle)

本页的某些部分是根据 创建和共享的工作进行的修改,并根据 许可证中所述的条款使用。

适用于