几种形式:
long lastPollTime = Optional.ofNullable(object).map(o -> o.getTime()).orElse(0L);long lastPollTime = Optional.ofNullable(object).map(YouObjectClass::getTime).orElse(0L);long lastPollTime = Optional.ofNullable(object).isPresent() ? object.getTime() : 0;long lastPollTime = object != null ? object.getTime() : 0;
其中,最后一个不使用Optional(因此不能严格回答您的问题!)更易于阅读,运行时开销也较小,因此应优先使用。
可以说,如果您反转选项,它甚至更简单:
long lastPollTime = object == null ? 0 : object.getTime();
…尽管您可能更喜欢默认的默认设置-这是个人喜好的问题。
如果您确实不能使用三元运算符,并且正在执行很多操作,则可以编写自己的实用程序方法:
public <T,U> U mapWithFallback(T obj, Function<T,U> function, U fallback) { if(obj == null) { return fallback; } else { return function.apply(obj); }}…可称为:
long lastPollTime = mapWithFallback(object, o -> o.getTime(), 0);
…或者使用以下方法完全嘲笑您的无三元检查:
public <T,U> U ifElse( Supplier<Boolean> a, Supplier<U> ifTrue, Supplier<U> ifFalse) { if(a.get()) { return ifTrue.get(); } else { return ifFalse.get(); }}long lastPollTime = ifElse( () -> object == null, () -> object.getTime(), () -> 0);最好完全避免使用null引用,这样就不需要这种检查了,例如使用Null
Object模式。
…或通过编写返回
Optional而不是返回空值的方法。
Optional是一个伟大的阶级;用它。只是不要将某些内容
Optional完全转换为纯文本,这样您就可以立即检查它是否为空。



