【Guava】Optional接口来避免空指针错误
null会带来很多问题,从开始有null开始有无数程序栽在null的手里,null的含义是不清晰的,检查null在大多数情况下是不得不做的,而我们又在很多时候忘记了对null做检查,在我们的产品真正投入使用的时候,空指针异常出现了,这是一种讨厌的情况。
鉴于此google的guava库中提供了Optional接口来使null快速失败,即在可能为null的对象上做了一层封装,在使用Optional静态方法of时,如果传入的参数为null就抛出NullPointerException异常。
使用Optional除了简化粗鲁的if(null == object)、降低函数的复杂度、增加可读性之外,它是一种傻瓜式的防护,Optional引导编码人员主动的思考引用为null的情况。
1.Optional 创建实例
创建实例 | 描述 |
---|---|
Optional.of(T) | 若引用为null则快速失败,抛出异常 java.lang.NullPointerException |
Optional.absent() | 创建引用缺失的Optional实例 |
Optional.fromNullable(T) | 引用为null则表示缺失 |
2.Optional查询引用
常用方法 | 描述 |
---|---|
boolean isPresent() | 包含的引用非null的(引用存在),返回true |
T get() | 返回包含的内容,则抛出java.lang.IllegalStateException |
T or(T) | 返回包含的内容,如果为空,则返回指定的值 |
T orNull | 返回包含的内容,如果为空,则返回null |
Set asSet() | 如果引用存在,返回只有单一元素的集合;如果引用缺失,返回空集合。 |
Optional transform() | 引用存在,则它被转换给定的功能;否则absent()被返回。 |
Iterable presentInstances(Iterable<? extends Optional<? extends T>> optionals) | 将参数optionals中为null的optional剔除,同时返回值对象的Iterable |
3.代码示例
1.基本用法
Optional<Integer> possible = Optional.fromNullable(5);//创建允许null值的Optional
System.out.println(possible.isPresent());
System.out.println(possible.get()); // 5
System.out.println(possible.or(3)); // 5
System.out.println(possible.orNull()); // 5
System.out.println(possible.asSet()); // [5]
2.presentInstances
List<Optional<Integer>> list = new ArrayList<>();
for (int index = 10; index > 0; --index) {
Integer t;
if (0 == index % 2) {
t = index;
} else {
t = null;
}
list.add(Optional.fromNullable(t));
}
Iterable<Integer> it = Optional.presentInstances(list);
it.forEach(System.err::println);
//输出结果为:
//10
//8
//6
//4
//2
【Guava】Optional接口来避免空指针错误的更多相关文章
- Jdk14都要出了,还不能使用 Optional优雅的处理空指针?
1. 前言 如果你没有处理过空指针,那么你不是一位真正的 Java 程序员. 空指针确实会产生很多问题,我们经常遇到空的引用,然后又想从这个空的引用上去获取其他的值,接着理所当然的碰到了 NullPo ...
- Tomcat8.5配置https启动报空指针错误
tomcat8.5版本和tomcat8.0有了很大的区别,默认的server.xml中https的配置方式也有了变化: <Connector port="8443" prot ...
- [saiku] 连接 mondrain 数据源出错-空指针错误
我的个亲娘,这个问题查半天终于查出来了. 一开始以为是配置的mysql的location连接有问题,各种修改啊各种尝试,还是不行. 好死不死报了空指针错误,让人无法下手. 后来发现是这样子的: 生成s ...
- ViewPager空指针错误,android.support.v4.view.ViewPager.onSaveInstanceState
support.v4 包为我们提供了一个非常实用的滑动控件ViewPager,在使用ViewPager时有一个需要注意的地方: 即: android.support.v4.view.ViewPager ...
- 空指针错误 java.lang.NullPointerException
使用基本的JAVA数据类型,变量的值要么已经是默认值,如果没有对其正常赋值,程序便 不能通过编译,因此使用基本的JAVA数据类型(double,float,boolean,char,int,long) ...
- NIO SelectionKey attachment()空指针错误
Channel注册到Selector时添加了一个Object: serverSocketChannel1.register(selector, SelectionKey.OP_ACCEPT, num[ ...
- 切记切记:Spring配置文件中,Component-scan无法扫描到的类中的自动装配对象无法被调用,报空指针错误。
Spring单例注入,单例对象可设置成Spring元件. 只有Spring的元件中@Autowired才有用,在普通类中@Autowired虽然不会编译报错,但运行时会报空指针错误.
- unity_实用小技巧(空指针错误)
在游戏开发中,空指针错误是我们最常见也是最容易出现的错误.下面介绍一下博主近期遇见的空指针错误 如上图,有两个类,如果此时我们在图2中调用图1的单例模式可能会出现空指针错误. 原因在于:编译器可能先执 ...
- Java8 Optional && Guava Optional
Java8 -- Optional boolean isPresent():与obj != null()一样:调用get()前要调用isPresent()检查,不然会报错 Optional的三种构造方 ...
随机推荐
- ldap域账号登录
$host = "iflytek.com"; $user = 'yimiao@'.$host;//'用户名@域名'; $pswd = "******"; //1 ...
- Windows与Linux相互远程桌面连接
对于远程桌面连接Linux,大家可能会第一时间想到使用VNC,,远程桌面Windows,大家第一时间会想到使用Windows自带的远程桌面.那么有没有办法,使得在Linux中可以远程Windo ...
- Android各国语言Values文件夹命名规则
android多国语言文件夹文件汇总如下: 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中文(香港):values-zh-rHK 英语(美国):values-e ...
- Java Web系列:Java Web 项目基础
1.Java Web 模块结构 JSP文件和AXPX文件类似,路径和URL一一对应,都会被动态编译为单独class.Java Web和ASP.NET的核心是分别是Servlet和IHttpHandle ...
- Spring学习(七)——开发Web Service的几种方式
本文作者在学习使用Java开发Web Service(不包括Restful)时,由于不知道Java有这么多框架支持开发Web Service一度陷入迷惘,不知道这些框架各有 什么不同,各有什么优缺点. ...
- php foreach 遍历细节探讨
foreach 也是正常的语法循环结构,可以有 break 和 continue 等操作 遍历过程中值变量传递默认是值传递 输出结果为: 遍历过程中值变量可以认为设定为引用传递:foreach($数组 ...
- [JS&Jquery]实现页面表格中相同内容的行或列合并
详细链接:https://shop499704308.taobao.com/?spm=a1z38n.10677092.card.11.594c1debsAGeak<script type=&qu ...
- 如何实现一个IOS网络监控组件
此文由作者朱志强授权网易云社区发布. Mobile Application Monitor IOS组件设计技术分享 背景 应用程序性能管理Application Performance Managem ...
- Prim算法---最小生成树
最小生成树的Prim算法也是贪心算法的一大经典应用.Prim算法的特点是时刻维护一棵树,算法不断加边,加的过程始终是一棵树. Prim算法过程: 一条边一条边地加, 维护一棵树. 初始 E = {}空 ...
- jQuery中animate与scrollTop、offset().top实例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...