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

在设置变量之前检查 null - 没有 if-else

在设置变量之前检查 null - 没有 if-else

GCT1015 2022-10-07 17:54:54
我用来从一个对象Lombok-Builder构建我的apijava对象entityRewardApi.builder()                 .rewardId(rewardEntity.getrewardId())                 .rewardTitle(rewardEntity.getrewardTitle())                 .rewardText(rewardEntity.getrewardText())                 .rewardFor(rewardEntity.getrewardFor())                 .rewardType(rewardEntity.getrewardType())                 .rewardFromDate(rewardEntity.getrewardFromDate().toZonedDateTime())                 .rewardToDate(rewardEntity.getrewardToDate().toZonedDateTime())                 .isDisplayOn(rewardEntity.getIsDisplayOn())                 .createdId(rewardEntity.getCreatedId())                 .updatedId(rewardEntity.getUpdatedId())                 .createdDate(rewardEntity.getCreatedDate().toZonedDateTime())                 .lastModifiedDate(rewardEntity.getLastModifiedDate().toZonedDateTime())                 .build();我正在nullPointerException设置lastModifiedDate字段,因为entity对象正在获取该字段,并且正在null执行toZonedDateTime()null如何在没有传统方式(如下所述)的情况下解决这个问题if (null!=rewardEntity.getLastModifiedDate(){....}我想在null使用设置变量时进行检查,builder-pattern而不是null在构建对象后进行检查。无论如何 ?
查看完整描述

3 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

所有的孩子都喜欢Optional这些日子:

Optional.ofNullable(rewardEntity.getLastModifiedDate())
    .map(r -> r.toZonedDateTime())
    .orElse(null) // or some other default value


查看完整回答
反对 回复 2022-10-07
?
jeck猫

TA贡献1909条经验 获得超7个赞

rewardEntity.getLastModifiedDate() != null ? rewardEntity.getLastModifiedDate().toZonedDateTime() : null

它被称为条件运算符,它是一个三元运算符,因为它具有三个操作数。


查看完整回答
反对 回复 2022-10-07
?
隔江千里

TA贡献1906条经验 获得超10个赞

你可以有一个通用的实用方法来处理空情况,比如


static <T, R> R transform(T obj, Function<T, R> function) {

    return obj != null ? function.apply(obj) : null;

}

并按如下方式使用


.rewardToDate(transform(rewardEntity.getRewardToDate(), OffsetDateTime::toZonedDateTime))

实际上更好的是“覆盖” lombok 构建器方法,因为您现在拥有的看起来更像是占位符/DTO 而不是构建器:


@Builder

private static class RewardApi {

    //...

    private ZonedDateTime rewardToDate;


    public static class RewardApiBuilder {


        public RewardApiBuilder rewardToDate(OffsetDateTime offsetDateTime) {

            if(offsetDateTime != null) {

                this.rewardToDate = offsetDateTime.toZonedDateTime();

            }

            return this;

        }

    }

}


查看完整回答
反对 回复 2022-10-07
  • 3 回答
  • 0 关注
  • 106 浏览

添加回答

举报

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