基礎工具--Guava-Libraries學習筆記(一)

weixin_34321977發表於2012-08-19

什麼是Guava-Libraries?

Guava-Libraries是google對java的一個擴充套件,主要涵蓋集合、快取、併發、I/O、反射等等。

它本來是Google內部所使用的一個類庫,後來整理開源出來了。這套庫的設計引入了很多新的理念,研究一下可能會使你對Java這門語言有新的認識和看法。

地址:http://code.google.com/p/guava-libraries/

這篇短文主要是關於Guava-Libraries基礎工具,內容是我參考官方wiki和自己的使用體驗結合而成。

null的使用

null在java中是一個很特殊的東西。它可以標識一個不確定的物件,比如

Ojbect o = null

同時在很多個集合中它代表key不存在,也可以代表值為null。

null使用需要給外的小心,稍不注意就會出現很多問題。當然更多的時候只是單純的覺得null不夠優雅而已。

Guava為我們提供了一個Optional的抽象類來解決這個問題。用類Present和Absent代表值存在和不存在。

以下是一個例子:

Optional possible = Optional.of(5);
if (possible.isPresent()) {
   System.out.println(possible.get());
}

Optional absentValue = Optional. absent();
if (absentValue.isPresent())
  System.out.println(absentValue.get());
System.out.println(absentValue.or(-1));
System.out.println(absentValue.orNull());
System.out.println(absentValue.asSet());

第一種是值存在的,第二種是值不存在的。執行效果如下:

guava-1-1

這裡說明一下isPresent()方法是判斷是否有值的。or方法是非null返回Optional的值,否則返回傳入值。

orNull()方法是非null返回Optional的值,否則返回null。

我個人覺得or方法比較常用就是了。

條件判斷

Guava還封裝了一些條件檢查方法,比如判斷真假、判斷是否為空、判斷index是否合法等等。如果判斷通過,返回值本身,否則丟擲錯誤。

每種方法又對應了三種過載:

1.沒有錯誤資訊

2.有直接的錯誤資訊

3.帶模板的錯誤資訊

來個小例子:

int i = Preconditions.checkNotNull(null);
int i2 = Preconditions.checkNotNull(null, "錯誤");
int i3 = Preconditions.checkNotNull(null, "錯誤:%s", "001");

效果如下:

guava-1-2

guava-1-3

guava-1-4

物件的常用方法

簡單實現了Object的一些方法而已,比如toString、hashCode。

我個人覺得equal這塊使用者不大,主要是toString和Compare。

特別是ComparisonChain的使用,有種鏈式程式設計的感覺。

例子:

System.out.println("a equal a :" + Objects.equal("a", "a"));
System.out.println("a equal b :" + Objects.equal("a", "b"));

System.out.println("hascode : "
		+ Objects.hashCode("one", "two", 3, 4.0));

System.out.println("Blog toString : "
		+ Objects.toStringHelper("Blog").add("name", "huang")
				.add("url", "http://htynkn.cnblogs.com/").toString());

System.out.println(ComparisonChain.start().compare(1.0, 1)
		.compare("a", "a").compare(1.4411, 1.441).result());

效果:

guava-1-5

寫在最後

Guava是google封裝以後的東西,肯定經過了很多實踐和測試。但是有些東西用著還是比較奇怪,感覺封裝以後更混亂了。大家挑選著合適的用吧。

相關文章