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());