【Guava 教學】(1)從避免使用 null 開始
|
大多數開發者對 Guava 的認識,是從其中對Java 標準 API 中 Java Collections 框架功能的增強或補充開始,那是 guava-libraries 中的一部份,也就是 Guava Collections,在這部份,Java Collections 框架參與者之一 Joshua Bloch 也曾對其提出相關建議。然而 guava-libraries 不僅僅是 Collections 的功能加強版,它還包括了許多進階特性,甚至有不少設計是借鏡了函數式程式設計的概念,像是不可變動結構、避免 在 guava-libraries 的 Wiki 上,一開始就談到了 Using/avoiding null,上頭一開始引用了 Java Collections 群集框架及 JSR166 參與者之一 Doug Lea 的話: “Null sucks." 接著又引用了圖靈獎得主、快速排序發明者 Tony Hoare,在 QCon London 2009 主講《Null References: The Billion Dollar Mistake》場次時的一段話: “I call it my billion-dollar mistake."
由於 String nickName = getNickName("Duke");
if(nickName == null) {
nickName = "CodeData User";
}
out.println(nickName);
如果客戶端忘了檢查 那麼可將 String nickName = getNickName("Duke").get();
out.println(nickName);
在 Optional<String> nick = getNickName("Duke");
String nickName = nick.isPresent() ? nick.get() : "CodeData User";
out.println(nickName);
不過這看來有點囉嗦,一個比較好的方式可以是: String nickName = getNickName("Duke").or("CodeData User");
out.println(nickName);
在 return rs.next() ? rs.getString("nickname") : null;
則可以使用 return rs.next() ? Optional.of(rs.getString("nickname")) : Optional.absent();
當然,過去許多程式庫中使用了不少 String nickName = Optional.fromNullable(getNickName("Duke")).or("CoDeData User");
out.println(nickName);
在 Guava 上還有一些方法,是針對字串而設定,最主要就是讓語義清楚。因為過去對於字串沒有值,各開發者會有各自的表示,因而造成同一個程式中,有可能某些開發者認為字串沒有值時,應該傳回 現在,你可以進一步看看 Guava 的 Wiki 上 Using/avoiding null 說的是怎麼一回事了。所以你知道嗎?JDK8 中也會有個 |

Java 學習之路






技術發燒友
06/07嗯嗯,過度的使用null好像真的不太好
morchory
06/30這裡還有兩篇相關的文章:https://tangsan.im/coding/%E8%BD%AC-guava-%E6%95%99%E7%A8%8B1-%E4%BD%BF%E7%94%A8-google-collections-guava-static-imports-%E7%BC%96%E5%86%99%E6%BC%82%E4%BA%AE%E4%BB%A3%E7%A0%81/ 和 https://lab.howie.tw/2012/12/use-google-guava-or-apache-commons-for-argument-validation.html
firenut
07/19這樣的話還是把壓力留在了調用方,只不過容錯的接口統一了,可以這麼理解麼?