Java 8 Optional不仅用于替换空值
总览
在Java 8中,您可以返回Optional而不是返回null。 就像您在Java 7中所做的那样。这取决于您是否倾向于忘记检查null还是使用静态代码分析检查对nullalbe的引用,这可能有很大的不同。
但是,还有一种更引人注目的情况是将Optional视为具有0或1值的Stream。
简单的可选用例
在Java 7的旧时代中,您将编写如下内容:
String text = something();
if (text != null) {
注意: Oracle Java 7将在2015年4月“公开更新结束”。
使用Optional可以编写:
Optional text = something();
if (text.isPresent()) {String text2 = text.get();
但是,如果您偏执狂,您可能会写。
Optional text = something();
if (text != null && text.isPresent()) {String text2 = text.get();
如果您的项目中经常出现NullPointerException错误,则Optional可能会有所帮助,但否则看起来并没有太大帮助。
一个更复杂的例子
让我们考虑一下这个例子
static String getFirstSecondThird(Nested nested) {try {return ((Contained2) nested.first.second).get(0).third;} catch (NullPointerException | ClassCastException | IndexOutOfBoundsException ignored) {return null;}
}
这真的很丑。 您可以构建一长串条件检查,而不是捕获异常,但要查看要执行的操作却变得非常困难。
可选允许您处理所有可能的错误情况,而无需使用Exception或嵌套的if / else逻辑。
static Optional getFirstSecondThird(Optional nested) {return nested // could be non-present.map(x -> x.first) // could be null.map(x -> x.second) // could be null// could be another type.map(x -> x instanceof Contained2 ? (Contained2) x : null).map(x -> x.list) // could be null.filter(x -> !x.isEmpty()) // could be empty.map(x -> x.get(0)) // could be null.map(x -> x.third); // could be null.
}
我们得到的是一系列映射和过滤器,它们只有在值非空且存在的情况下才进行。 如果任何值为null或过滤器为true,则整个结果为“不存在”。
结论
使用Optional是一种以安全的方式导航复杂数据结构的有效方法。 lambda的目的是减少样板代码,并在这种情况下避免了所有检查或错误。
额外
为了您的兴趣,这是我在上面的示例中使用的类。
static class Nested {Contained first;
}static class Contained {IContained2 second;
}interface IContained2 {
}static class Contained2 implements IContained2 {List list;
}static class Data {String third;
}
翻译自: https://www.javacodegeeks.com/2015/02/java-8-optional-is-not-just-for-replacing-a-null-value.html
Java 8 Optional不仅用于替换空值相关推荐
- optional空值判断_Java 8 Optional不仅用于替换空值
optional空值判断 总览 在Java 8中,您可以返回Optional而不是返回null. 就像您在Java 7中所做的那样.这可能会有所不同,这取决于您是否倾向于忘记检查null还是使用静态代 ...
- Java:如何更优雅的处理空值?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:lrwinx https://lrwinx.github.i ...
- Java 8 - Optional全解
文章目录 在Optional出现之前经常遇到的空指针异常 采用防御式减少NullPointerException (深度质疑) null-安全的第二种尝试(过多的退出语句) Optional的介绍以及 ...
- 【Java】Optional容器
说明 Optional 类是一个可以为null的容器对象.如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象. Optional 是个容器:它可以保存类型T的值,或者 ...
- Java 8 - Optional Class可选类
Java 8 - Optional Class可选类 1 Java 8-概述 2 Java 8 - Lambda表达式 3 Java 8 - 方法引用 4 Java8-Functional Inter ...
- JAVA高级——Optional
JAVA高级--Optional 二.为何要避免null指针 三.使用Optional优化null判断 3.1.1 使用Optional优化Car类 3.1.2 Optional的几种模式 3.1.3 ...
- 使用Java 8 Optional避免空指针异常
2019独角兽企业重金招聘Python工程师标准>>> Optional可以让你的代码具有可读性,且会避免出现空指针异常. 都说没有遇到过空指针异常的程序员不是Java程序员,nul ...
- Java 8 - Optional实战
文章目录 Pre 用 Optional 封装可能为 null 的值 异常与 Optional 的对比 避免使用基本类型的Optional对象 Pre Java 8 - Optional全解相信你已经了 ...
- Java 8 Optional 类
Java 8 Optional 类 Java 8 新特性 Optional 类是一个可以为null的容器对象.如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象. ...
最新文章
- python制作工资计算器-Python制作个税计算器
- 雷人的调查:荷兰女性的安全意识
- 高级工程师必须精通的七种武器(摘录)
- Apache ab测试工具使用方法(无参、get传参、post传参)
- 一种数据结构 跳表skiplist
- 使用Azure DevOps持续集成GitHub项目
- php程序xml有必要学习吗,对初学者非常有用的PHP技巧
- javascript Date object
- 甘肃刘家峡赤壁“结”出多彩冰瀑
- MPEG4 协议详解
- 怎样在nature上查文献?
- 树莓派4支持多大tf卡_树莓派入门指南(Raspberry Pi)
- java实现鼠标宏编程_对键盘鼠标宏处理--按键精灵让我们不要重复工作
- 荐书一本-----《天才在左,疯子在右》
- JS中根据入职时间计算工龄
- 如何评价微软在数据中心使用FPGA代替传统CPU的做法?
- Excel IF 函数怎么用
- 英特尔应用服务器,英特尔(Intel)服务器CPU全解析(图)
- pandas用groupby后对层级索引levels的处理
- OSChina 元宵节乱弹 ——青龙偃月刀都实名了
热门文章
- ssh(Spring+Spring mvc+hibernate)——Dept.hbm.xml
- java实现人脸识别源码【含测试效果图】——DaoImpl层(BaseDaoUtilImpl)
- Mybatis+mysql动态分页查询数据案例——房屋信息的接口(IHouseDao)
- mfc定义了变量仍提示未定义标识符_JavaScript-变量
- mysql如何分析sql执行效率和进行效率优化
- ibatis(2)ibatis是什么
- cassandra 备份_使用sstableloader恢复Cassandra Priam备份
- graal java_使用SparkJava和Graal的本机微服务
- 使用ArchUnit验证代码和体系结构约束
- spring jms 事务_Spring JMS:处理事务中的消息