可能重复:
如何在 Java 中获取第一个非空值?
我有以下操作
function1(function2(param1,param2));
如果 function2 返回null
,我希望将其替换为零。我可以通过多种方式做到这一点,但有一些快捷方式吗?例如,是否有任何类似的内容
function1(function2(param1,param2)==null || "0")
注意:函数 2 返回一个字符串。
可能重复:
如何在 Java 中获取第一个非空值?
我有以下操作
function1(function2(param1,param2));
如果 function2 返回null
,我希望将其替换为零。我可以通过多种方式做到这一点,但有一些快捷方式吗?例如,是否有任何类似的内容
function1(function2(param1,param2)==null || "0")
注意:函数 2 返回一个字符串。
在切换到Guava之前,我发现自己为每个正在进行的项目编写了下面的函数。它可能已经在某个库中实现了。
<T> public static T coalesce(T... elements){
for(T element : elements) {
if (element != null) return element;
}
throw new NoSuchElementException();
}
// Usage:
function1(coalesce(function2(param1,param2), "default value"));
这很好,因为没有重复的代码,并且您不必在引入临时变量或执行两次相同的调用之间做出选择(就像之前建议的条件运算符一样)。这不好,因为它读起来不是很流利。
如果你正在使用 Guava(你应该是),你可以使用Optional
to Avoidnull
,它还有一个好处是让你的 API 更清晰,更不容易出现NullPointerException
s。
void function1(String arg) {}
Optional<String> function2(){ /* insert code*/ }
// Usage:
function1(function2().or("default value"));
当然,有一个三元运算符几乎可以做到这一点:
<expression> ? <value if expression is true> : <value if expression is false>
所以,
String result = function2(param1,param2);
function1(result != null ? result : "0");
会做你想做的。
怎么样
function1(function2(param1,param2) != null? function2(param1, param2): 0);
顺便说一句,如果 function2 没有对任何数据进行任何永久性更改,您只能使用它,因为它被调用了两次,如果确实如此,那么您第二次可能会得到不同的答案。
将表达式条件?
与赋值一起使用
Integer value = function1((value=function2(param1,param2)) != null? value: 0);