簡體   English   中英

我可以在線進行空值檢查嗎?

[英]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安全解除引用:

http://groovy.codehaus.org/Null+Object+Pattern

您可以使用三元運算符。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM