一、原因:
为避免nullPointException错误,一般都是进行显示的!=null判断,对于一些代码嵌套比较深的代码,会多出很多if-else,而且代码的拓展性和可读性较差。
二、使用方法
- 1、Optional类是对原有类的一次封装
变量存在时,Optional类是对原有类的简单封装;变量不存在时是会返回Optional.empty() 空对象
注意:
1、Optional.empty()对象和NULL有着本质的区别,引用null会报错,而引用Optional.empty()对象不会
2、Optional<T> 在语义上可以表示允许该类为空
- 2、Optional创建
// 创建空的Optional对象
Optional<T> optObj=Optional.empty()
//创建非空对象
Optional<T> optObj=Optional.of(T类对象实例)
// 创建可接受null的Optional
Optional<T> optObj=Optional.ofNullable(T类对象实例)
由于这种对象一般都会调用相应方法,Optional提供了相应的map和filter方法,返回都是Optional封装的对象
注意:
如果方法返回值是Optional对象,又调用map方法,那最终得到的返回值为Optional<Optional<T>>类型
这种就不能连续使用map或者filter方法
解决:
使用flatMap方法,它会把多个Optional嵌套变成一个Optional对象
关于Optional 值得获取方式,常用的方式有:
- 1、get() 为空时 会报错,不建议 ,因为与Null基本一致
- 2、orElse(T other) 在对象不包含值时会提供一个默认值 建议
3、应用
用Optional 封装可能为null的值,如
Object value=map.get("key");
Optional<Object> value=Optional.ofnullable(map.get("key"));
网友评论