Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在满足需求之前有条件地调用多个方法的最佳方法_Java - Fatal编程技术网

Java 在满足需求之前有条件地调用多个方法的最佳方法

Java 在满足需求之前有条件地调用多个方法的最佳方法,java,Java,我有一系列方法,我想连续调用它们,直到其中一个返回有效值,然后跳过其余的。我当前的代码如下: String value = ""; //invalid value while (true) { value = someMethod.getValue(); if (value.length() > 0) break; value = someOtherMethod.getValue(); if (value.length() > 0) break;

我有一系列方法,我想连续调用它们,直到其中一个返回有效值,然后跳过其余的。我当前的代码如下:

String value = ""; //invalid value
while (true) {
  value = someMethod.getValue();
  if (value.length() > 0) break;
  value = someOtherMethod.getValue();
  if (value.length() > 0) break;
  value = yetAnotherMethod.getValue();
  break;
}
它工作得很好,但我不喜欢创建无限循环然后手动打破它的概念。有更优雅的方法吗?

在我看来,没有优雅的方法。但是有比你写的更简单的方法。例如:

String value = someMethod.getValue();
if (value.length() == 0) {
    value = someOtherMethod.getValue();
}
if (value.length() == 0) {
    value = yetAnotherMethod.getValue();
}

在某些情况下,对于您的问题的某些变体,您可以使用循环和lambda数组、流或类似的方法来设计解决方案。然而,这将涉及日常开支和样板(以及读者的挠头)。。。在我看来,这并不优雅。

我认为选修课是一个展示“如果这不好,那么接受它”意图的好方法


someMethod.getValue()
someMethod().getValue()
,因为一个方法调用有括号,这一点很重要,为了获得一种很好的存储方法,最好将检查工作代码的请求发送到。。。话虽如此:没有无限循环是不可能的。我能看到的另一件事是:如果这个模式真的是这样的,那么可以使用一个
列表
,用lambdas填充,比如
()->someMethod.getValue()。然后,不要用“一个如果一个”的方法,而是只循环那个供应商列表……请精确说明您使用的对象的类型,因为在某一时刻,
value
是一个字符串,然后它是一个具有
isValid
METHOD的对象是的,我匆忙编辑了我的伪代码,实际的有点不同,它也有一些尝试捕捉等,我消除了使它更短。很抱歉。
Predicate<String> isNotEmpty = word -> word.length() > 0;

value = Optional.of(someMethod.getValue())
  .filter(isNotEmpty)
  .or(Optional.of(someOtherMethod.getValue())
  .filter(isNotEmpty)
  .orElse(yetAnotherMethod.getValue());
value = someMethod.getValue()
  .or(someOtherMethod.getValue())
  .orElse(yetAnotherMethod.getValue());