2012-09-26 44 views
2

可能重复:
How to get the first non-null value in Java?Java条件快捷

我有以下操作

function1(function2(param1,param2)); 

如果函数2返回null我想它以零替代。我可以通过多种方式做到这一点,但是有没有一些快捷方式符号?例如,是否有沿着这

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

注意的线什么:功能2返回一个字符串。

+0

通过“快捷方式,”你的意思是你不想要调用两次函数2,你也不想使用一个中间变量?如果是这样,你运气不好。 –

+0

你想要表达式的类型是什么? (即,要传递给函数1的值)。 0是一个int,它是一个原始类型(不能为null),但是function2()显然返回一个引用。 –

+0

@JamesMcLeod通过快捷方式我的意思是我不想将函数2赋给变量,然后在将它传递给函数1之前将它传递给“if”语句 –

回答

1

怎么样

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

顺便说一句,因为它叫了两声就只能用这个,如果函数2不作任何数据的任何永久性的变化,如果确实如此,那么你可能会得到不同的回答第二时间。

+0

我会试试这个,让你知道。 –

3

当然,也有一个三元运算符,做几乎正是:

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

所以,

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

会做你想要什么。

+0

这不会调用function2两次吗? – gtgaxiola

+0

@gtgaxiola:将其更改为首先保存结果。 – Keppil

+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")); 

这是很好的,因为有没有重复的代码,而不必引入一个临时变量或两次执行相同的呼叫(如先前提出的条件运算符的thingie)之间进行选择。这并不好,因为它读起来不太流利。

如果你正在使用番石榴(你应该是),你可以使用Optionalavoid null,这也有利于使你的API更清晰,更不易于NullPointerException s。

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

// Usage: 
function1(function2().or("default value")); 
0

使用表达条件?与分配

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