Java中的条件方法链接

时间:2018-12-21 19:42:34

标签: java

将方法链接在一起的最佳方法是什么?在我的场景中,有四个方法。如果 first 方法的输出为true,则必须调用 second 方法。

例如:

flag = method1();
if (flag){
  flag = method2();
}
if (flag){
  method3();
} 
// and so on for next methods ..

7 个答案:

答案 0 :(得分:18)

使用&&逻辑AND运算符:

if (method1() && method2() && method3() && method4()) {
    ........
}

Java从左到右评估此条件。
如果任何一种方法返回false,则评估将停止,因为最终结果为false短路评估)。

答案 1 :(得分:7)

如果以后某处不需要flag,那么@forpas的答案就是解决方法,否则我会这样做:

flag = method1() && method2() && method3() && method4()

答案 2 :(得分:3)

要使用短路但使其更易读,您可以

boolean flag = method1();
flag = flag && method2();
flag = flag && method3();

以此类推。请注意,您不能使用flag &= methodX(),因为它不会短路。

答案 3 :(得分:3)

首先,我想指出的是,这个答案绝不会比this answerthis answer更有效率,而这只是您可以在保持工作水平的同时完成当前任务的另一种方式您的快捷销售要求。

所以第一步是创建一个这样的方法:

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())){ ... };

答案 4 :(得分:2)

嵌套条件运算符可以解决此问题:

flag = method1() ? (method2() ? method3(): false): false;

答案 5 :(得分:1)

您可以使用&&运算符:

boolean flag = method1() && method2() && method3() && method4() && ...;

flag做任何事情。

答案 6 :(得分:0)

如果必须保存方法真值或必须发生其他副作用的话:

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; 
}

您不希望这样,这是...意外。 但这是一种向每个代码路径添加其他语句的可读方法。

否则:以其他方式进行操作,或者退回到ifs。