Guava是一種基于開源的Java庫,其中包含谷歌正在由他們很多項(xiàng)目使用的很多核心庫。這個(gè)庫是為了方便編碼,并減少編碼錯(cuò)誤。這個(gè)庫提供用于集合,緩存,支持原語,并發(fā)性,常見注解,字符串處理,I/O和驗(yàn)證的實(shí)用方法。
函數(shù)式編程 -增加JAVA功能和處理能力。
實(shí)用程序 - 提供了經(jīng)常需要在應(yīng)用程序開發(fā)的許多實(shí)用程序類。
驗(yàn)證 -提供標(biāo)準(zhǔn)的故障安全驗(yàn)證機(jī)制。
最佳實(shí)踐 - 強(qiáng)調(diào)最佳的做法。
考慮下面的代碼片段。
public class GuavaTester {
public static void main(String args[]){
GuavaTester guavaTester = new GuavaTester();
Integer a = null;
Integer b = new Integer(10);
System.out.println(guavaTester.sum(a,b));
}
public Integer sum(Integer a, Integer b){
return a + b;
}
}
運(yùn)行程序,看到如下結(jié)果。
Exception in thread "main" java.lang.NullPointerException
at GuavaTester.sum(GuavaTester.java:13)
at GuavaTester.main(GuavaTester.java:9)
以下是該代碼的問題。
sum() 不采取任何的保護(hù)傳遞的參數(shù)為null。
調(diào)用函數(shù)也并不擔(dān)心傳遞一個(gè)null 到sum()方法而產(chǎn)生意外。
當(dāng)程序運(yùn)行時(shí),NullPointerException異常發(fā)生。
為了避免上述問題,null檢查要在每個(gè)這樣存在問題地方。
讓我們來看看使用Optional,Guava 提供實(shí)用工具類來標(biāo)準(zhǔn)化方式解決上述問題。
import com.google.common.base.Optional;
public class GuavaTester {
public static void main(String args[]){
GuavaTester guavaTester = new GuavaTester();
Integer invalidInput = null;
Optional<Integer> a = Optional.of(invalidInput);
Optional<Integer> b = Optional.of(new Integer(10));
System.out.println(guavaTester.sum(a,b));
}
public Integer sum(Optional<Integer> a, Optional<Integer> b){
return a.get() + b.get();
}
}
運(yùn)行程序,看到結(jié)果如下。
Exception in thread "main" java.lang.NullPointerException
at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:210)
at com.google.common.base.Optional.of(Optional.java:85)
at GuavaTester.main(GuavaTester.java:8)
讓我們來了解上述程序的一些重要概念。
Optional - 實(shí)用類,使代碼使用null能夠正常。
Optional.of - 返回要用作參數(shù)Optional類的實(shí)例。檢查傳遞的值是否為null。
Optional.get - 獲取輸入存儲在Optional 類的值。
使用Optional類,可以方便地查看調(diào)用者方法來傳遞參數(shù)正確與否。