我可以在网上空检查吗?

2020年11月28日 61点热度 0条评论

我有一个如下所示的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...
}

但是,我想知道是否有一种方法可以做到这一点?是否可以对内联对象进行空检查?

我似乎记得读过关于能够使用问号的信息,但我想不起来确切的语法,对此我可能是错的。请注意,尽管这是另一种有效的方法,但我并不是在指三元运算符。

解决方案如下:

我想您还记得从项目代币中被拒绝(http://mail.openjdk.java.net/pipermail/coin-dev/2009-March/000047.html)的猫王运算符(https://blogs.oracle.com/darcy/entry/project_coin_final_five)。

但是,雅加达公用程序具有类似于nvl的功能,例如http://commons.apache.org/lang/api-2.6/org/apache/commons/lang/StringUtils.html#defaultString(java.lang.String。尽管这些功能不是标准的Java,但它们在大多数程序中最终都依赖于某些库。

当您设计具有有效null结果的函数时,您会遇到一个常见问题:您必须在任何地方记录和处理特殊情况。我可以向您保证,有人会在维护时弄乱它,导致虚假的空指针异常。这就是为什么我通常会建议不要返回null的设计的原因。