1. 程式人生 > >[Google Guava] 1.3-常見Object方法

[Google Guava] 1.3-常見Object方法

情況 false pareto except col 順序 javase acl http

原文鏈接 譯者: 沈義揚

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方法