当前位置: 首页 > 面试题库 >

Java 8中Optional类型的有效用法

彭正谊
2023-03-14
问题内容

这是Java 8中Optional类型的有效(预期)用法吗?

String process(String s) {
    return Optional.ofNullable(s).orElseGet(this::getDefault);
}

问题答案:

我会再摇摆一下。

这是有效用法吗?是的,从狭义上讲,它可以编译并产生您期望的结果。

这是预期用途吗?否。现在,有时候发现事情超出了最初的用途,如果行得通,那就太好了。但是对于Optional,我们发现通常情况下效果并不理想。

Optional在我们的JavaOne
2015演讲“ Java 8 Lambda和Streams的API设计”中 ,我和BrianGoetz讨论了一些问题:

  • 链接到视频
  • 链接到幻灯片

的主要用途Optional如下:(幻灯片36)

Optional旨在为库方法 返回类型 提供 有限的 机制,在这种情况下,很明显需要表示“无结果”,并且使用该方法极 有可能导致错误
null

链接方法的能力Optional无疑非常酷,并且在某些情况下,它减少了条件逻辑带来的混乱。但是很多时候这是行不通的。一个典型的代码味道是不是使用方法链接的代码,
处理Optional一些方法返回,它 创建了
一个Optional从东西是空的,以连锁方式,避免条件语句。这是一个实际应用的示例(同样来自我们的演示,幻灯片42):

// BAD
String process(String s) {
    return Optional.ofNullable(s).orElseGet(this::getDefault);
}

// GOOD
String process(String s) {
    return (s != null) ? s : getDefault();
}

使用该方法的Optional时间更长,并且大多数人发现它比常规代码更加晦涩难懂。不仅如此,它还会无缘无故地产生额外的垃圾。

底线:仅仅因为您 可以 做某事并不意味着您 应该 做。



 类似资料:
  • 主要内容:1 Java8 Optional类的介绍,2 Java8 Optional类的方法,3 Java8 Optional类案例:不使用Optional类,4 Java8 Optional类案例1:如果不存在值,5 Java8 Optional类案例2:如果存在值,6 Java8 Optional类案例31 Java8 Optional类的介绍 Java在Jdk 8中引入了新的Optional类。它是一个公共的final类,用于处理Java应用程序中的NullPointerException

  • 主要内容:1.强制解包,2.自动解包,3.Optional绑定Swift 4还引入了类型,它处理缺少值。 简单的解释是:“有一个值,它等于x”或“根本没有值”。 一个本身就是一种类型,实际上是Swift 4的新超级枚举之一。 它有两个可能的值,和,其中是Swift 4中可用的正确数据类型的关联值。 这是一个的整数声明 - 下面是一个的声明 - 通过以下示例来了解如何在Swift 4中工作 - 当使用playground运行上述程序时,得到以下结果 - 类似于

  • 本文向大家介绍Java8 Optional原理及用法解析,包括了Java8 Optional原理及用法解析的使用技巧和注意事项,需要的朋友参考一下 平时开发的工作中, 自己组内的很多大佬经常使用Optional的用法, 自己问他们, 这个到底有什么好处呢,他们说可以很好的规避好空指针的问题, 我们在平时写java代码的时候, 如果是一个新手, 肯定很多情况下都会出现空指针的报错, 而java8 以

  • 这是Java8中可选类型的有效(预期)用法吗?

  • 本文向大家介绍Java8中的类型注解浅析,包括了Java8中的类型注解浅析的使用技巧和注意事项,需要的朋友参考一下 注解大家都知道,从java5开始加入这一特性,发展到现在已然是遍地开花,在很多框架中得到了广泛的使用,用来简化程序中的配置。那充满争议的类型注解究竟是什么?复杂还是便捷? 一、什么是类型注解 在java 8之前,注解只能是在声明的地方所使用,比如类,方法,属性;java 8里面,注解

  • 我正在使用RxVertx,它是一种RxJava和Java8,我有一个编译错误。 这是我的代码: 编译错误是:“在封闭范围内定义的局部变量游戏必须是最终的或有效的最终的” 我无法将“game”定义为final,因为我在函数末尾执行分配\set并返回它。 如何编译此代码? 谢了。