我有以下操作
function1(function2(param1,param2));
如果function2返回null
我希望将其替换为零。我可以通过多种方式做到这一点但是有一些快捷符号吗?例如,这个
function1(function2(param1,param2)==null || "0")
注意:函数2返回一个字符串。
答案 0 :(得分:4)
在切换到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
到avoid null
,这样做的好处是可以使你的API更清晰,更不容易{{1} }第
NullPointerException
答案 1 :(得分:3)
当然,有一个三元运算符几乎完全相同:
<expression> ? <value if expression is true> : <value if expression is false>
所以,
String result = function2(param1,param2);
function1(result != null ? result : "0");
会做你想做的事。
答案 2 :(得分:1)
怎么样
function1(function2(param1,param2) != null? function2(param1, param2): 0);
顺便说一下,如果function2没有对任何数据进行任何永久性更改,你只能使用它,因为它被调用了两次,如果有,那么第二次你可能得到一个不同的答案。
答案 3 :(得分:0)
将表达式条件?
与作业
Integer value = function1((value=function2(param1,param2)) != null? value: 0);