[英]Can I null-check in-line?
我有一個Java命令,如下所示:
Foo f = new Foo();
String string = f.format(new Bar().getSelection());
// ^ may be null
有時我的Bar
對象可能返回null,這是設計的。
對我來說,自然要做的就是將命令分成多行並分別進行空檢查,例如:
Foo f = new Foo();
BarSel bs = new Bar().getSelection();
String string = "";
if (bs != null) {
string = f.format(bs);
// continue...
}
但是,我想知道是否有辦法在一行中做到這一點? 是否可以內聯檢查對象?
我似乎記得閱讀有關能夠使用問號的內容,但我不記得確切的語法,我可能錯了。 請注意,我不是指三元運算符,盡管這是另一種有效的方法。
使用三元運算符 :
String string = bs != null ? f.format(bs) : "";
我想你還記得Elvis操作符( http://mail.openjdk.java.net/pipermail/coin-dev/2009-March/000047.html ),它被拒絕( https://blogs.oracle.com/darcy/從項目硬幣進入/ project_coin_final_five )。
但是,jakarta commons有類似nvl的函數,如http://commons.apache.org/lang/api-2.6/org/apache/commons/lang/StringUtils.html#defaultString(java.lang.String )盡管這些函數不是標准的java,它們最終在大多數程序中作為某些庫的依賴。
當您使用有效的null結果設計函數時,您遇到的問題很常見:您必須在任何地方記錄和處理特殊情況。 我幾乎可以向你保證,有人會在維護中弄亂這一點,導致虛假的空指針異常。 這就是為什么我一般會推薦不返回null的設計。
我已經遲到了,但我想要類似的東西,並發現使用Java 8 Optional class。 問題陳述的解決方案:
String string = Optional.ofNullable(bs).map(f::format).orElse("");
不是在java中,而是一些基於JVM的語言(值得注意的是:groovy)具有null安全解除引用:
您可以使用三元運算符。
string = bs != null ? f.format(bs) : "";
如果bs不為null,這將為您提供一個空字符串文字。 或者您可以使用:
if (bs != null) string = f.format(bs);
Foo f = new Foo();
BarSel bs = new Bar().getSelection();
String string = bs != null ? f.format(bs) : "";
三元運算符的另一種方式:
String string = bs == null ? "" : f.format(bs);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.