栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java可选,如果object不为null-返回方法结果,如果为null-返回默认值

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java可选,如果object不为null-返回方法结果,如果为null-返回默认值

几种形式:

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
完全转换为纯文本,这样您就可以立即检查它是否为空。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/570283.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号