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

有没有更好的方法在 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()但不确定这是否真的可以帮助进行多次检查?


白猪掌柜的
浏览 181回答 3
3回答

繁花不似锦

这是我能想到的最好的。我会让你决定它是否更干净: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);请注意,这与原始字段略有不同,因为即使另一个字段为空,它也可能设置一个字段。

交互式爱情

如果你想用Optional它重写它可能看起来像这样:Optional.ofNullable(info1).filter(i -> i.getId() != null).filter(i -> i.getPartyNumber() != null).ifPresent(i -> {&nbsp; billing.setSenderId(info1.getId());&nbsp; billing.setSenderNumber(info1.getPartyNumber());});编辑info1只有当它不是null并且指定为Optional.filter参数的所有条件都匹配时,我们才处理。因此只有在info1 != nullandinfo1.getId() != null和info1.getPartyNumber() != null的情况下Consumer才会被执行。这是编码多个检查的另一种方法。它做你的代码所做的。同样的方法适用于info2.编辑Optional结合多行符号的流畅 API将每个条件分解为一行。IMO 这使代码易于阅读,从而易于理解。它尽可能保持原始代码的简单性、清晰性,并且仍然以相同的方式运行。

炎炎设计

如果您在源代码中复制代码,则应始终三思而后行。我认为你的测试很好,但我会为它做一个方法,所以你的代码看起来像这样:if ( isComplete(info1) { .... } if ( isComplete(info2) { .... }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java