Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 8中绝对空值的可选值_Java_If Statement_Exception_Optional - Fatal编程技术网

Java 8中绝对空值的可选值

Java 8中绝对空值的可选值,java,if-statement,exception,optional,Java,If Statement,Exception,Optional,这是什么意思 Optional.of(someLinkToNull).ifPresent(present -> { System.out.println(present); }); 给出NullpointerException 请给出一个示例,如何使用可选的更少代码检查null?使用可调用的静态工厂方法,而不是-后者不允许值为null: 请注意,尽管在学习optional时编写这样的代码是可以的,但它的通常用例是通过一系列转换传递一个本身可能为null的对象,这些

这是什么意思

Optional.of(someLinkToNull).ifPresent(present -> {
        System.out.println(present);
    });
给出NullpointerException

请给出一个示例,如何使用可选的更少代码检查null?

使用可调用的静态工厂方法,而不是-后者不允许值为null:

请注意,尽管在学习optional时编写这样的代码是可以的,但它的通常用例是通过一系列转换传递一个本身可能为null的对象,这些转换也可以将其减少为null,而不是疯狂地分支以避免NPE。在您的情况下,一个简单的空检查if就足够了,如注释中提到的4castle。例如,考虑这个无意义的代码:

    Optional.ofNullable(order)
            .map(Order::getCharges)
            .flatMap(charges -> charges.stream().filter(ChargeFilters::isFee).findFirst())
            .map(Fee::getIssuer)
            .map(PaymentIssuer::getAddress)
            .map(Address::getStreet)
            [...]
这里可能会出现一些问题:

订单可能为空 可能没有与订单相关的费用 费用发行人可能没有地址,如果订单来自第三方系统,则可能不知道该地址 发卡机构的地址可能没有指定街道,例如,船只没有任何与之关联的街道
正如您所看到的,至少已经有四个空检查,而不是像上面那样的一个很好的可选的流畅的东西。

使用空值,of不允许值为空这不是可选的一个很好的用例。它会创建一个不必要的对象并混淆代码。如果有链接,请执行以下操作!=空{…}管理员,请删除这个问题。
    Optional.ofNullable(order)
            .map(Order::getCharges)
            .flatMap(charges -> charges.stream().filter(ChargeFilters::isFee).findFirst())
            .map(Fee::getIssuer)
            .map(PaymentIssuer::getAddress)
            .map(Address::getStreet)
            [...]