小编典典
几种形式:
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 U mapWithFallback(T obj, Function function, U fallback) {
if(obj == null) {
return fallback;
} else {
return function.apply(obj);
}
}
…可称为:
long lastPollTime = mapWithFallback(object, o -> o.getTime(), 0);
…或者使用以下方法完全嘲笑您的无三元检查:
public U ifElse( Supplier a, Supplier ifTrue, Supplier 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完全转换为纯文本,这样您就可以立即检查它是否为空。
2020-11-13