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 使用Optional<T>

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

google guava工具包 checkNotNull的作用

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

Guava 指南 之「使用和避免 null」

使用和避免null “null,糟糕透啦!” —— Doug Lea. “我称呼null为百亿美金的错误!” —— C. A. R. Hoare. 轻率地使用null可能导致很多令人惊愕的问...
  • qq_35246620
  • qq_35246620
  • 2017年09月16日 15:42
  • 748

Guava学习笔记:Optional优雅的使用null

Guava学习笔记:Optional优雅的使用null   在我们学习和使用Guava的Optional之前,我们需要来了解一下Java中null。因为,只有我们深入的了解了null...
  • legend_x
  • legend_x
  • 2014年01月21日 20:10
  • 718

Java的Optional,更有意义的“空”

背景NullPointerException是java开发中的常见的异常.Person person = people.find("John Smith"); if (person != null) ...
  • imduan
  • imduan
  • 2017年06月02日 16:48
  • 526

Guava中的Optional来表达null

写过Java的人都知道有一种exception叫做NullPointerException。所以写的好的程序都是对输入输出进行null检查,也就是防御性编程。 但null具体表示什么意思,大家知道吗?...
  • hongchangfirst
  • hongchangfirst
  • 2015年11月19日 13:49
  • 1531

[Guava源码日报](5)Optional分析

大多数情况下,开发人员使用null表明的是某种缺失情形:可能是已经有一个默认值,或没有值,或找不到值。例如,Map.get返回null就表示找不到给定键对应的值。Guava用Optional表示可能为...
  • SunnyYoona
  • SunnyYoona
  • 2017年05月02日 11:58
  • 741

Guava Optional 和 Java 8 optional

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

Guava之Optional

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

Optional用法(Java SE 8–Java SE 9)

原文:原文地址 Introduction Optional 是一个包含或着不包含一个非空值的容器对象。如果一个值存在,isPresent()将会返回true 并且 get() 将会返回所对应的值...
  • lsgqjh
  • lsgqjh
  • 2017年01月15日 19:15
  • 4138
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Guava中的Optional来表达null
举报原因:
原因补充:

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