Google Guava 工具集__1__Optional对象设计 使用和避免 Null
来源:互联网 发布:庄子知乎 编辑:程序博客网 时间:2024/05/24 00:00
Google Guava 工具集 博客栏目链接:Google Guava 博客栏目
博客栏目涉及演示代码 GitHub 地址: 点击打开Guava 演示代码包
为什么设计Optional类
/**
* 在Java世界里,解决空引用问题常见的一种办法是,使用Null Object模式。
* 这样的话,在“没有什么”的情况下,就返回Null Object,客户端代码就不用判断是否为空了。
* 但是,这种做法也有一些问题。
* 首先,我们肯定要为Null Object编写代码,而且,如果我们想大规模应用这个模式,我们要为几乎每个类编写Null Object。
* <p>
* 幸好,我们还有另外一种选择:Optional。
* <p>
* Optional是对可以为空的对象进行的封装,它实现起来并不复杂
* 如果你期待的是代码量的减少,恐怕这里要让你失望了。
* 单从代码量上来说,Optional甚至比原来的代码还多。
* 但好处在于,你绝对不会忘记判空.
* <p>
* 写的快了忘记 null 的逻辑处理0.0
* <p>
* <p>
* JDK8里面也有Optional类了
* {@link java.util.Optional}
*
* @author wei.Li by 14-8-26.
*/
Java google Guava Null Optional API demo
/** * Java google Guava Null Optional */class GuavaOptional_ { private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(Optional_.class); /** * 创建对象 */ protected static void createObject() { //创建一个空对象 Optional<String> absent = Optional.absent(); //创建一个非空对象 Optional<String> stringOptional = Optional.of("aa"); //创建一个不确定是否非空的对象 Optional<String> fromNullable = Optional.fromNullable("bb"); } /** * 其它方法总结 */ protected static void othermMethods() { Optional<String> obj2null = Optional.absent(); Optional<String> obj2fromNullable = Optional.fromNullable("a"); //isPresent方法,对象中是否不为空 LOGGER.info("fromNullable.isPresent() is <{}>", obj2null.isPresent());//false LOGGER.info("fromNullable.isPresent() is <{}>", obj2fromNullable.isPresent());//true //Optional.get() Returns如果为空抛出异常IllegalStateException //一般配合isPresent()方法使用 LOGGER.info("obj2null.get() is <{}>", obj2null.get());//异常 //Returns 如果当前对象为null 则替换为 or 方法中的参数 LOGGER.info("obj2null.or(\"aa\") is <{}>", obj2null.or("aa"));//aa LOGGER.info("obj2fromNullable.or(\"aa\") is <{}>", obj2fromNullable.or("aa"));//aa //orNull Returns 如果存在返回实例,否则返回 null obj2null.orNull(); obj2fromNullable.orNull(); } /** * 示例 * * @return 处理后的 obj */ protected static Object example() { Object o = null; Optional<Object> optional = Optional.fromNullable(o); //判断对象是否为 null if (optional.isPresent()) { // 对象不为 null optional.get();//获取 //optional.orNull();//设为空 } else { //为 null 时候的处理 optional.or("S");//设值 } return optional; }}
使用Optional的意义在哪儿?
使用Optional除了赋予null语义,增加了可读性,最大的优点在于它是一种傻瓜式的防护。Optional迫使你积极思考引用缺失的情况,因为你必须显式地从Optional获取引用。直接使用null很容易让人忘掉某些情形,尽管FindBugs可以帮助查找null相关的问题,但是我们还是认为它并不能准确地定位问题根源。
如同输入参数,方法的返回值也可能是null。和其他人一样,你绝对很可能会忘记别人写的方法method(a,b)会返回一个null,就好像当你实现method(a,b)时,也很可能忘记输入参数a可以为null。将方法的返回类型指定为Optional,也可以迫使调用者思考返回的引用缺失的情形。
- Google Guava 工具集__1__Optional对象设计 使用和避免 Null
- [Google Guava] 1.1-使用和避免null
- [Google Guava] 1.1-使用和避免null
- [Google Guava] 1.1-使用和避免null
- 跟我学Guava:基础1.1-使用和避免null
- Guava 指南 之「使用和避免 null」
- Google Guava 工具集简介-使用
- Google Guava 工具集__2__Cache 缓存使用
- Google guava工具类的介绍和使用
- [Java工具集]Google Guava 常用功能
- google工具类guava
- Guava 避免null-Optional的使用方法
- google guava简单使用
- google guava使用介绍
- google Guava Cache使用
- google guava使用例子
- Google Guava 使用经验总结
- Google Guava Collections 使用介绍
- HDU 1391 Number Steps【找规律】
- Tomcat中JVM内存溢出及合理配置
- ural Minimal Coverage (区间覆盖)
- 【Linux命令】--date的用法
- java框架中的适配器模式
- Google Guava 工具集__1__Optional对象设计 使用和避免 Null
- Linux进程通信--共享内存
- C++通过文件读写流读取XML文件,并输出保存为XML文件
- 智能家居需开启“热家居”模式
- Ch 2 PL/SQL编程基础
- android activity四种启动模式
- jdk环境变量配置
- 迷茫和沮丧中,28岁的我能做一名程序员吗?
- 关于android的contentProvider