2

可能重复:
如何在 Java 中获取第一个非空值?

我有以下操作

function1(function2(param1,param2));

如果 function2 返回null,我希望将其替换为零。我可以通过多种方式做到这一点,但有一些快捷方式吗?例如,是否有任何类似的内容

function1(function2(param1,param2)==null || "0")

注意:函数 2 返回一个字符串。

4

4 回答 4

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(你应该是),你可以使用Optionalto Avoidnull,它还有一个好处是让你的 API 更清晰,更不容易出现NullPointerExceptions。

void function1(String arg) {}
Optional<String> function2(){ /* insert code*/ }

// Usage:
function1(function2().or("default value"));
于 2012-09-26T21:24:16.143 回答
3

当然,有一个三元运算符几乎可以做到这一点:

<expression> ? <value if expression is true> : <value if expression is false>

所以,

String result = function2(param1,param2);
function1(result != null ? result : "0");

会做你想做的。

于 2012-09-26T20:59:43.630 回答
1

怎么样

function1(function2(param1,param2) != null? function2(param1, param2): 0);

顺便说一句,如果 function2 没有对任何数据进行任何永久性更改,您只能使用它,因为它被调用了两次,如果确实如此,那么您第二次可能会得到不同的答案。

于 2012-09-26T21:00:17.567 回答
0

将表达式条件?与赋值一起使用

Integer value = function1((value=function2(param1,param2)) != null? value: 0);
于 2012-09-26T21:25:25.867 回答