有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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...
}

但是,我想知道是否有一种方法可以在一行中实现这一点?是否可以内联空检查对象

我似乎记得读过关于能够使用问号的文章,但我记不起确切的语法,我可能错了。注意,我不是指三元运算符,尽管这是另一种有效的方法


共 (6) 个答案

  1. # 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. # 2 楼答案

    ternary operator一起:

    String string = bs != null ? f.format(bs) : "";
    
  3. # 4 楼答案

    可以使用三元运算符

    string = bs != null ? f.format(bs) : "";

    如果bs不为null,这将为您提供一个空字符串文本。或者你可以使用:

    if (bs != null) string = f.format(bs);

  4. # 5 楼答案

    三元运算符的另一种方法是:

    String string = bs == null ? "" : f.format(bs);
    
  5. # 6 楼答案

    我玩游戏迟到了,但我想要类似的东西,并找到了Java 8Optional类的用法。问题陈述的解决方案:

    String string = Optional.ofNullable(bs).map(f::format).orElse("");