[Google Guava] 1.3-常見Object方法
原文鏈接 譯者: 沈義揚
equals
當一個對象中的字段可以為null時,實現Object.equals方法會很痛苦,因為不得不分別對它們進行null檢查。使用Objects.equal幫助你執行null敏感的equals判斷,從而避免拋出NullPointerException。例如:
Objects.equal("a", "a"); // returns true Objects.equal(null, "a"); // returns false Objects.equal("a", null); // returns false Objects.equal(null, null); // returns true
註意:JDK7引入的Objects類提供了一樣的方法Objects.equals。
hashCode
用對象的所有字段作散列[hash]運算應當更簡單。Guava的Objects.hashCode(Object...)會對傳入的字段序列計算出合理的、順序敏感的散列值。你可以使用Objects.hashCode(field1, field2, …, fieldn)來代替手動計算散列值。
註意:JDK7引入的Objects類提供了一樣的方法Objects.hash(Object...)
toString
好的toString方法在調試時是無價之寶,但是編寫toString方法有時候卻很痛苦。使用 Objects.toStringHelper可以輕松編寫有用的toString方法。例如:
// Returns "ClassName{x=1}" Objects.toStringHelper(this).add("x", 1).toString(); // Returns "MyObject{x=1}" Objects.toStringHelper("MyObject").add("x", 1).toString();
compare/compareTo
實現一個比較器[Comparator],或者直接實現Comparable接口有時也傷不起。考慮一下這種情況:
class Person implements Comparable<Person> { private String lastName; private String firstName; private int zipCode; public int compareTo(Person other) { int cmp = lastName.compareTo(other.lastName); if (cmp != 0) { return cmp; } cmp = firstName.compareTo(other.firstName); if (cmp != 0) { return cmp; } return Integer.compare(zipCode, other.zipCode); } }
這部分代碼太瑣碎了,因此很容易搞亂,也很難調試。我們應該能把這種代碼變得更優雅,為此,Guava提供了ComparisonChain。
ComparisonChain執行一種懶比較:它執行比較操作直至發現非零的結果,在那之後的比較輸入將被忽略。
public int compareTo(Foo that) { return ComparisonChain.start() .compare(this.aString, that.aString) .compare(this.anInt, that.anInt) .compare(this.anEnum, that.anEnum, Ordering.natural().nullsLast()) .result(); }
這種Fluent接口風格的可讀性更高,發生錯誤編碼的幾率更小,並且能避免做不必要的工作。更多Guava排序器工具可以在下一節裏找到。
原創文章,轉載請註明: 轉載自並發編程網 – ifeve.com本文鏈接地址: [Google Guava] 1.3-常見Object方法
[Google Guava] 1.3-常見Object方法