码迷,mamicode.com
首页 > 其他好文 > 详细

Guava源码分析——Optional

时间:2015-05-22 11:11:37      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:

Google的Guava库的出现,使Java代码的书写更加流畅,无论是从效率还是代码风格上,Guava都必将成为一种趋势(Java8明显可以看出,大多数的功能开始借鉴Guava),今天开始,PoNa就以自己微薄的水平试着分析一下Guava的源码,借此使自己更上一层楼,还请各位多多扔砖。

Guava文档中,第一篇就提到的尽量避免使用Null,会给代码带来一些负面影响,并举出map.get(key) == null,带来的混淆。由此。Guava提出了Optional的概念。

 

技术分享

 

如图所示,Guava的Optional有两种实现,Absent和Present,这就可以理解为,传统代码书写方式中的null和non-null。而Guava中Absent和Present中重写Optional的isPresent()方法,是的Absent和Present有了最本质的区别(false,true)。

 

Optional也提供了一些从null或者non-null转换为Optional的方法,例如:Optional.fromNullable(getTFromXXX());从源码中可以看出,转换很简单。

 public static <T> Optional<T> fromNullable(@Nullable T nullableReference) {
        return (nullableReference == null) ? Optional.<T>absent() : new Present<T>(nullableReference);
 }

如下,也成为了Optional最常用的方法,代替了if(null == instance)的书写方式

Optional.fromNullable(getTFromCache()).or(Optional.fromNullable(getTFromDB()).transform(new Function<Object, Object>() {
@Override
public Object apply(Object input) {
addCache(input);
return input;

}
}));

上面这段代码与下面代码功能相同

  T result = getTFromCache();

  if (null == result) {
    resut = getTFromDB();
     if(result != null) {
        addCache(result);
      }
  }      
  return result;

以上就是自己对Optional的一些理解,还望大家多多指教。

 

Guava源码分析——Optional

标签:

原文地址:http://www.cnblogs.com/pona/p/4521087.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!