3 回答
TA贡献1898条经验 获得超8个赞
这是它在“普通”Java 中的样子。只是为了比较。
private Long buildBookingValidDate (TimeIntervalType validFor) {
if(validFor.getStartTimeStamp() == null)
return null;
return DateUtils.toEpochMilli(validFor.getStartTimeStamp());
}
TA贡献1779条经验 获得超6个赞
我建议使用.map
and returnOptional<Long>
而不是null
当输入为 时null
。
使用jshell 的示例,
当输入是某个值时,
jshell> import java.time.OffsetDateTime
jshell> Optional<OffsetDateTime> data = Optional.ofNullable(OffsetDateTime.now())
data ==> Optional[2019-09-08T23:36:48.470738-07:00]
jshell> data.map($ -> $.toInstant().toEpochMilli())
$2 ==> Optional[1568011008470]
当输入为空时,它将返回Optional.empty,但客户端必须检查输出是否有值
jshell> Optional<OffsetDateTime> data = Optional.ofNullable(null)
data ==> Optional.empty
jshell> data.map($ -> $.toInstant().toEpochMilli())
$4 ==> Optional.empty
TA贡献1966条经验 获得超4个赞
您误用了Optional
- 它并不是为了取代空检查而设计的。
如果您仍然不想在您的情况下使用普通的旧 Java,那么您可以创建一个辅助方法,例如
static <T, R> R applyIfNotNull(T obj, Function<T, R> function) { return obj != null ? function.apply(obj) : null; }
并按如下方式调用它
long time = applyIfNotNull(validFor.getStartTimeStamp(), FooBar::toEpochMilli);
既然你这么喜欢,你可以在方法Optional
中使用它:applyIfNotNull
static <T, R> Optional<R> applyIfNotNull(T obj, Function<T, R> function) { return obj != null ? Optional.of(function.apply(obj)) : Optional.empty(); }
添加回答
举报