我有以下操作
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」語句 –