我有这个代码,我正在尝试弄清楚使用java 8的最佳方法避免null指针例外?
promotion.forEach(item ->
item.getDiscount().getPromotions().forEach(promotion -> {
// logic code here
})
);
避免NullPoInterExceptions的最佳方法是避免零值。在您的示例中,请确保所有方法永远不会返回null。
而不是返回null,您有几个选择:
- 扔一个充满活力。例如,如果方法的输入导致分区为零,则可以抛出异常而不是返回null。
- 返回空的可选。例如,可以更改返回字符串的方法以返回可选的字符串。当没有字符串返回时,您返回可选。Empty()
- 返回一个空集合(例如,当结果类型为列表时,如果没有找到结果,请返回一个空列表,而不是返回null)
- 返回能够反映结果的自定义结果类型。例如,在进行验证时,您可以返回代表成功/失败和错误消息的验证,而不是在没有错误时返回null错误消息
promotion.stream()
.map(item->item.getDiscount()).filter(Objects::nonNull)
.map(discount->discount.getPromotions()).filter(Objects::nonNull)
.forEach(innerPromotion->{//logic code});
在使用逻辑代码中使用所有空元素之前,您可以过滤所有空元素,以便只有非空元素才能运行逻辑代码。
您是否正在考虑诸如可选的事情:
item.getDiscount().getPromotions().stream().forEach(promotion ->
Optional.ofNullable(promotion).ifPresent(p -> {
// logic code
} )
);
编辑:如果item.getDiscount()
可能为null,则可以尝试:
Optional.ofNullable(item.getDiscount()).ifPresent(d ->
d.getPromotions().stream().forEach(promotion ->
Optional.ofNullable(promotion).ifPresent(p -> {
// logic code
} )
)
);