关闭

Guava中的Optional来表达null

1286人阅读 评论(0) 收藏 举报
分类:

写过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



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1421394次
    • 积分:12251
    • 等级:
    • 排名:第1211名
    • 原创:266篇
    • 转载:1篇
    • 译文:3篇
    • 评论:136条
    博客专栏