这是什么感觉?
Optional.of(someLinkToNull).ifPresent(present -> {
System.out.println(present);
});
给出NullpointerException。
请举例说明如何使用Optional(少代码)检查null?
答案 0 :(得分:2)
使用ofNullable
静态工厂方法而不是of
- 后者不允许值为null
:
Optional.ofNullable(someLinkToNull).ifPresent(present -> {
System.out.println(present);
});
请注意,虽然在学习可选项时编写类似的代码是很好的,但通常的用例是传递一个本身可能为null的对象,通过一系列转换也可以将其减少为null,而不是像疯了一样分支出来以避免NPE。在您的情况下,一个简单的空检查是否足够(如评论中提到的4castle
)。例如,考虑这段毫无意义的代码:
Optional.ofNullable(order)
.map(Order::getCharges)
.flatMap(charges -> charges.stream().filter(ChargeFilters::isFee).findFirst())
.map(Fee::getIssuer)
.map(PaymentIssuer::getAddress)
.map(Address::getStreet)
[...]
这里可能会出现一些问题:
正如你所看到的那样,至少有四个空检查,而不是像上面那样的可选流畅的东西。