如何最好地将多个方法链接在一起?在我的情况下,有四个方法。如果第一个方法的输出为true
,则必须调用第二个方法。
例如:
flag = method1();
if (flag){
flag = method2();
}
if (flag){
method3();
}
// and so on for next methods ..
如何最好地将多个方法链接在一起?在我的情况下,有四个方法。如果第一个方法的输出为true
,则必须调用第二个方法。
例如:
flag = method1();
if (flag){
flag = method2();
}
if (flag){
method3();
}
// and so on for next methods ..
使用逻辑 AND
运算符 &&
:
if (method1() && method2() && method3() && method4()) {
........
}
Java从左到右评估这个条件。如果任何一个方法返回false
,那么评估就停止了,因为最终结果是false
(短路评估)。false
,则评估会停止,因为最终结果是false
(短路评估)。if(method1()){if(method2(){…}}
,看起来不太好,但更容易理解。 - Koziołek如果flag
在后面没有用,则应使用@forpas的答案,否则我会这样做:
flag = method1() && method2() && method3() && method4()
public static boolean apply(BooleanSupplier... funcs){
return Arrays.stream(funcs).allMatch(BooleanSupplier::getAsBoolean);
}
这个函数接受任意数量的函数,这些函数的签名必须是() -> boolean
,也就是说,它们都是供应商函数(不带输入参数并返回布尔结果的函数)。
然后,您可以使用方法引用调用它,如下所示:
if(apply(Main::method1,
Main::method2,
Main::method3,
Main::method4)){ ... };
Main
是定义方法的类。
或lambda表达式:
if(apply(() -> method1(),
() -> method2(),
() -> method3(),
() -> method4())){ ... };
boolean flag = method1();
flag = flag && method2();
flag = flag && method3();
等等。请注意,您不能使用 flag&= methodX()
,因为它不会短路计算。
flag = method1() ? (method2() ? method3(): false): false;
flag = method1() && (method2() && method3());
。假设在条件之后需要 flag
,那么这是一个很好的方法。 - Ousmane D.&&
运算符:boolean flag = method1() && method2() && method3() && method4() && ...;
做任何与flag
相关的事情。
如果需要保存方法的真值或者需要发生其他副作用:
boolean flag;
switch(1){
case 1: flag = method1();
//additional code goes here
if(!flag) break;
case 2: flag = method2();
//additional code goes here
if(!flag) break;
....
default: flag = method10();
if(!flag) break;
}
你不应该想要这个,而且这是意料之外的。 但这是一种可读性较高的方式,可以向每个代码路径添加附加语句。
否则:以不同的方式处理或退回到if语句。