Guava中的Optional来表达null

原创 2015年11月19日 13:49:27

写过Java的人都知道有一种exception叫做NullPointerException。所以写的好的程序都是对输入输出进行null检查,也就是防御性编程。

但null具体表示什么意思,大家知道吗?有人说null就是空对象,然后呢?空对象表示什么呢?表示操作成功了,但是结果是空对象,还是操作没成功,所以是空对象?这两种意思到底可以是哪种呢?


正因为null可以被解释成这两种意思,所以才导致了null的歧义性:

1 是操作成功,结果是空对象

2 还是操作失败


那么Guava中的Optional类就是一种能区别这两种情况的返回值,一个Optional对象可以包含一个非空的T引用(即“存在的”)或者不包含任何东西(即“空缺的”),但Optional从来不会包含对null值的引用。


所以使用Optional<T>作为返回值,则后续代码可以通过isPresent()来判断是否返回了期望的值,并且可以使用get()来获得实际的返回值。原本期望返回null或者返回不为null,会有歧义。返回absent表示没有返回期望的值。


这些是Optional的API:

1. OptionalObject.isPresent(): 返回对象是否有值。
2. Optional.absent(): 返回一个空Optional对象,isPresent() 将会返回false
3. Optional.of(): 创Optional对象,输入参数不能为null
4. Optional.fromNullable(): 创Optional对象,输入可以为null
5. OptionalObject.asSet(): 和Optional对象值合并,如果为null则返回size为0的Set
6. OptionalObject.or(): 和Optional对象值合并,如果为null为空加则返回or参数作为默认值
7. OptionalObject.orNull(): 和Optional对象值合并,如果为null为空加则返回Null作为默认值


前三个用到的地方最多,4和6结合起来用也很方便,可以表达if else的效果。

原文:http://blog.csdn.net/hongchangfirst/article/details/49925849

作者:hongchangfirst

hongchangfirst的主页:http://blog.csdn.net/hongchangfirst



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

google guava工具包 checkNotNull的作用

checkNotNull 源码如下: Preconditions.checkNotNull(object); public static T> T checkNotNull(T reference)...
  • Fairy_Z
  • Fairy_Z
  • 2016年09月28日 11:39
  • 2779

跟我学Guava:基础1.1-使用和避免null

在我们学习和使用Guava的Optional之前,我们需要来了解一下Java中null。因为,只有我们深入的了解了null的相关知识,我们才能更加深入体会领悟到Guava的Optional设计和使用上...

Guava Cache之Cache接口

1、通过put或putAll手动向Cache中添加数据,guava不缓存value是null的key。我们可以在系统启动的时候,就将某些数据手动放入缓存中,这样就可以避免系统启动后,第一个用户访问缓存...

Guava之Optional

Java中null的使用会有如下副作用: 1.无法表达具体的业务含义,语义含糊不清; 2.增加了NullPointException的发生,因为不知道什么地方就返回了一个null; 3.null和空容...

Google Guava 使用Optional<T>

Google Guava之Optional为什么使用这个 使用Optional除了简化粗鲁的if(null == object)、降低函数的复杂度、增加可读性之外,它是一种傻瓜式的防护,Optiona...

Guava Optional 和 Java 8 optional

Null  上帝创造了男人,多年之后他老人家后悔了! Null的发明人同时也是快速排序的发明人表达对Null的忏悔称:“”这是个造成上亿美元损失的错误“。...

JDK8新特性:使用Optional避免null导致的NullPointerException

Optional实际上是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。...

Tomcat源码深入——Servlet容器之外观模式

之前一直很好奇Tomcat究竟是怎么实现的,刚开始学的时候还不懂容器和服务器这些有什么区别,Apache和Tomcat的区别及Web服务器,容器和应用服务器区别问题。直接看源码的话感觉还是会觉得一头雾...
  • iaiti
  • iaiti
  • 2016年06月28日 19:40
  • 1281

WebView详解及使用说明;(android外壳项目总结版)

最近做了一个关于webview写安卓的壳,套HTML5的应用,虽然整个写下来后,到了目前的进度,代码量不多,共有1000多行,但是整个壳的设计思想和实现思路还是当初查了很久的。所以写下来,以备后续查看...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Guava中的Optional来表达null
举报原因:
原因补充:

(最多只允许输入30个字)