为了账号安全,请及时绑定邮箱和手机立即绑定

为 NullPointerException、JAVA 8 编写多个检查的替代方法

为 NullPointerException、JAVA 8 编写多个检查的替代方法

白猪掌柜的 2021-08-25 10:22:26
有没有更好的方法在 JAVA 8 中对此进行编码?    if (info1 != null && info1.getId() != null && info1.getPartyNumber()!= null) {        billing.setSenderId(info1.getId());        billing.setSenderNumber(info1.getPartyNumber());    }    if (info2 != null && info2.getId() != null && info2.getPartyNumber()!= null) {        billing.setReceiverId(info2.getId());        billing.setSellerNumber(info2.getPartyNumber());                }    ..    ..提前致谢。注意:我查看了Optional.ofNullable()但不确定这是否真的可以帮助进行多次检查?
查看完整描述

3 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

这是我能想到的最好的。我会让你决定它是否更干净:


Optional<Info> oInfo1 = Optional.ofNullable(info1);

oInfo1.map(Info::getId).ifPresent(billing::setSenderId);

oInfo1.map(Info::getPartyNumber).ifPresent(billing::setSenderNumber);


Optional<Info> oInfo2 = Optional.ofNullable(info2);

oInfo2.map(Info::getId).ifPresent(billing::setReceiverId);

oInfo2.map(Info::getPartyNumber).ifPresent(billing::setSellerNumber);

请注意,这与原始字段略有不同,因为即使另一个字段为空,它也可能设置一个字段。


查看完整回答
反对 回复 2021-08-25
?
交互式爱情

TA贡献1712条经验 获得超3个赞

如果你想用Optional它重写它可能看起来像这样:


Optional.ofNullable(info1)

.filter(i -> i.getId() != null)

.filter(i -> i.getPartyNumber() != null)

.ifPresent(i -> {

  billing.setSenderId(info1.getId());

  billing.setSenderNumber(info1.getPartyNumber());

});

编辑

info1只有当它不是null并且指定为Optional.filter参数的所有条件都匹配时,我们才处理。因此只有在info1 != nullandinfo1.getId() != null和info1.getPartyNumber() != null的情况下Consumer才会被执行。这是编码多个检查的另一种方法。它做你的代码所做的。


同样的方法适用于info2.


编辑

Optional结合多行符号的流畅 API将每个条件分解为一行。IMO 这使代码易于阅读,从而易于理解。它尽可能保持原始代码的简单性、清晰性,并且仍然以相同的方式运行。


查看完整回答
反对 回复 2021-08-25
?
炎炎设计

TA贡献1808条经验 获得超4个赞

如果您在源代码中复制代码,则应始终三思而后行。我认为你的测试很好,但我会为它做一个方法,所以你的代码看起来像这样:

if ( isComplete(info1) { .... } if ( isComplete(info2) { .... }


查看完整回答
反对 回复 2021-08-25
  • 3 回答
  • 0 关注
  • 175 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信