java8特性:optional
optional最开始是出现在Guava的工具类中的,后来在JDK8中被正式加入进来,作为官方推荐的处理null的作法.
基本介绍
optional的构思,由于null存在很大的歧义,返回值为null的时候,你不能确定你的方法是执行成功了还是失败,比如map.get(“key”)返回null,你不能确定value是null,还是不在在这个键值对.在optional中,官方给optional提供泛型
,null只表示存在或者缺失.
构造方法
三种构造方式
- 允许输入值为null
推荐
//创建允许null值的Optional,5这个值也可以为null
Optional<Integer> possible = Optional.fromNullable(5);
- 不允许输入值为null,不然直接抛出空指针异常
//若引用为null则快速失败触发java.lang.NullPointerException
Integer nubmerone=4;
Optional<Integer> integerOptional = Optional.of(nubmerone);
- 只要值为null创建optional对象
//创建引用缺失的Optional实例,就是为NULL的
Optional<Integer> nullOptional=Optional.empty();
小结
从这里面可以看出我们平时代码里面应该使用Optional.formNullable,因为大多数情况下
1:
我们不能肯定获取的值一定不为null(只有特殊情况下值为null),所以使用这个方法 创建optional比较合适.
2:
使用optional就是为了防止出现空指针异常导致程序出错停止,如果使用of(value)创建,虽然可以直接定位到出错位置,但是会造成程序无法运行下去.
常见方法
//如果Optional包含非null的引用(引用存在),返回true
isPresent();
//如果Optional为NULL将触发异常
get();
//包含的引用缺失(null),返回默认的other,否则返回本身
orElse(T other) ;
//重写的equals方法
equals(Object obj) ;
总结
可以去看看这篇文章,博主是使用guava的optional做的示例,可以看看博主对于optional的理解,使用是附加的,核心还是对null的态度和编程理解.