【发布时间】:2017-09-02 23:04:24
【问题描述】:
我有很多功能:
String first(){}
String second(){}
...
String default(){}
每个都可以返回一个空值,默认值除外。 每个函数可以采用不同的参数。例如,第一个可以不带参数,第二个可以带一个字符串,第三个可以带三个参数,等等。我想做的是这样的:
ObjectUtils.firstNonNull(first(), second(), ..., default());
问题在于,由于函数调用,this 会进行急切评估。在第二个函数之后说,我想提前退出哪里(因为函数调用可能很昂贵,想想 API 调用等)。在其他语言中,您可以执行类似的操作:
return first() || second() || ... || default()
在 Java 中,我知道我可以执行以下操作:
String value;
if (value = first()) == null || (value = second()) == null ...
return value;
由于所有 == null 检查,IMO 的可读性不太好。ObjectUtils.firstNonNull() 首先创建一个集合,然后进行迭代,只要函数被延迟评估就可以了。
建议? (除了做一堆ifs)
【问题讨论】:
-
使用方法引用来避免急切的评估?
-
你有java 8吗?
-
Java 8+ 没问题
-
default不可能是你的方法名:P
标签: java lazy-evaluation coalesce