我使用Lombok-Builder
从api
对象构建entity
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();
我在设置nullPointerException
字段时得到lastModifiedDate
,因为entity
对象正在将该字段设为null
并在{的顶部执行toZonedDateTime()
{1}}
如何在没有传统方式(如下所述)的情况下解决此问题
null
在我使用if (null!=rewardEntity.getLastModifiedDate(){....}
设置变量时,我想检查null
,并且在构建对象后不进行builder-pattern
检查。有什么办法吗?
答案 0 :(得分:3)
rewardEntity.getLastModifiedDate() != null ? rewardEntity.getLastModifiedDate().toZonedDateTime() : null
它被称为条件运算符,是三元运算符,因为它具有三个操作数。
答案 1 :(得分:3)
这几天所有的孩子都喜欢DeviceManagerInterface::GetAudioOutputDevices
:
Optional
答案 2 :(得分:1)
您可以有一个通用的实用程序方法来处理类似null的情况
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;
}
}
}