java我可以内联检查nullcheck吗?
我有一个如下所示的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...
}
但是,我想知道是否有一种方法可以在一行中实现这一点?是否可以内联空检查对象
我似乎记得读过关于能够使用问号的文章,但我记不起确切的语法,我可能错了。注意,我不是指三元运算符,尽管这是另一种有效的方法
# 1 楼答案
我想你还记得elvis操作符(http://mail.openjdk.java.net/pipermail/coin-dev/2009-March/000047.html),它被coin项目拒绝了(https://blogs.oracle.com/darcy/entry/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,但它们最终在大多数程序中依赖于某些库
当你设计一个具有有效空结果的函数时,你会遇到一个常见的问题:你必须在任何地方记录并处理这个特殊情况。我可以向您保证,有人会在维护过程中搞砸这件事,导致虚假的空指针异常。这就是为什么我通常会推荐不返回空值的设计
# 2 楼答案
与ternary operator一起:
# 3 楼答案
不是在java中,但一些基于JVM的语言(值得注意的是:groovy)具有空安全的解引用:
http://groovy.codehaus.org/Null+Object+Pattern
# 4 楼答案
可以使用三元运算符
string = bs != null ? f.format(bs) : "";
如果bs不为null,这将为您提供一个空字符串文本。或者你可以使用:
if (bs != null) string = f.format(bs);
# 5 楼答案
三元运算符的另一种方法是:
# 6 楼答案
我玩游戏迟到了,但我想要类似的东西,并找到了Java 8Optional类的用法。问题陈述的解决方案: