在设置变量之前检查是否为 null - 没有 if-else
Check for null before setting the variable - without if-else
我使用 Lombok-Builder
从 entity
对象
构建我的 api
java 对象
RewardApi.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();
我在设置 lastModifiedDate
字段时得到 nullPointerException
,因为 entity
对象将该字段作为 null
获取,并在顶部执行 toZonedDateTime()
共 null
如何在没有传统方法(如下所述)的情况下解决这个问题
if (null!=rewardEntity.getLastModifiedDate(){....}
我想在使用 builder-pattern
设置变量时检查 null
,而不是在构建对象后进行 null
检查。有什么办法吗?
rewardEntity.getLastModifiedDate() != null ? rewardEntity.getLastModifiedDate().toZonedDateTime() : null
它被称为条件运算符,它是一个三元运算符,因为它有三个操作数。
最近所有的孩子都喜欢Optional
:
Optional.ofNullable(rewardEntity.getLastModifiedDate())
.map(r -> r.toZonedDateTime())
.orElse(null) // or some other default value
你可以有一个通用的实用方法来处理像
这样的空情况
static <T, R> R transform(T obj, Function<T, R> function) {
return obj != null ? function.apply(obj) : null;
}
并按如下方式使用
.rewardToDate(transform(rewardEntity.getRewardToDate(), OffsetDateTime::toZonedDateTime))
实际上更好的是 "override" lombok 构建器方法,因为你现在拥有的看起来更像是 placeholder/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;
}
}
}
我使用 Lombok-Builder
从 entity
对象
api
java 对象
RewardApi.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();
我在设置 lastModifiedDate
字段时得到 nullPointerException
,因为 entity
对象将该字段作为 null
获取,并在顶部执行 toZonedDateTime()
共 null
如何在没有传统方法(如下所述)的情况下解决这个问题
if (null!=rewardEntity.getLastModifiedDate(){....}
我想在使用 builder-pattern
设置变量时检查 null
,而不是在构建对象后进行 null
检查。有什么办法吗?
rewardEntity.getLastModifiedDate() != null ? rewardEntity.getLastModifiedDate().toZonedDateTime() : null
它被称为条件运算符,它是一个三元运算符,因为它有三个操作数。
最近所有的孩子都喜欢Optional
:
Optional.ofNullable(rewardEntity.getLastModifiedDate())
.map(r -> r.toZonedDateTime())
.orElse(null) // or some other default value
你可以有一个通用的实用方法来处理像
这样的空情况static <T, R> R transform(T obj, Function<T, R> function) {
return obj != null ? function.apply(obj) : null;
}
并按如下方式使用
.rewardToDate(transform(rewardEntity.getRewardToDate(), OffsetDateTime::toZonedDateTime))
实际上更好的是 "override" lombok 构建器方法,因为你现在拥有的看起来更像是 placeholder/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;
}
}
}