我有以下操作
function1(function2(param1,param2));
如果函数2返回null
我想它以零替代。我可以通过多种方式做到这一点,但是有没有一些快捷方式符号?例如,是否有沿着这
function1(function2(param1,param2)==null || "0")
注意的线什么:功能2返回一个字符串。
我有以下操作
function1(function2(param1,param2));
如果函数2返回null
我想它以零替代。我可以通过多种方式做到这一点,但是有没有一些快捷方式符号?例如,是否有沿着这
function1(function2(param1,param2)==null || "0")
注意的线什么:功能2返回一个字符串。
怎么样
function1(function2(param1,param2) != null? function2(param1, param2): 0);
顺便说一句,因为它叫了两声就只能用这个,如果函数2不作任何数据的任何永久性的变化,如果确实如此,那么你可能会得到不同的回答第二时间。
我会试试这个,让你知道。 –
当然,也有一个三元运算符,做几乎正是:
<expression> ? <value if expression is true> : <value if expression is false>
所以,
String result = function2(param1,param2);
function1(result != null ? result : "0");
会做你想要什么。
在切换到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)之间进行选择。这并不好,因为它读起来不太流利。
如果你正在使用番石榴(你应该是),你可以使用Optional
到avoid null
,这也有利于使你的API更清晰,更不易于NullPointerException
s。
void function1(String arg) {}
Optional<String> function2(){ /* insert code*/ }
// Usage:
function1(function2().or("default value"));
使用表达条件?
与分配
Integer value = function1((value=function2(param1,param2)) != null? value: 0);
通过“快捷方式,”你的意思是你不想要调用两次函数2,你也不想使用一个中间变量?如果是这样,你运气不好。 –
你想要表达式的类型是什么? (即,要传递给函数1的值)。 0是一个int,它是一个原始类型(不能为null),但是function2()显然返回一个引用。 –
@JamesMcLeod通过快捷方式我的意思是我不想将函数2赋给变量,然后在将它传递给函数1之前将它传递给“if”语句 –