Guava源码分析——Optional

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

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

 

 

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

 

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

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

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

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

}
}));

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

  T result = getTFromDB()

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

以上就是本身对Optional的一些理解,还望你们多多指教。blog

相关文章
相关标签/搜索