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

相關文章
相關標籤/搜索