標籤:return 實現 需要 his add class turn city 操作
java中Object類中都有hashcode()、equals()、toString()這三個方法,因此java中所有的類中都有這三個方法。
在Object類中toString()方法的實現是列印對象的地址,這個列印出來人類是看不懂的,這個資訊列印出來沒有什麼用處。所以在Effective Java這本書中,作者推薦我們盡量重寫這個方法,使其列印出有用的資訊。實現toString()方法是一個機械的繁瑣的工作,所以我們應該藉助成熟的類庫來幫忙。java陣營中著名的類庫guava可以很好的協助我們完成這個工作。以下是程式碼範例:
@Override public String toString() { return MoreObjects.toStringHelper(this) .add("houseNumber", houseNumber) .add("street", street) .toString(); }
如果我們設計的類要與hashmap、hashset一起工作,涉及到hash值得操作。那麼就需要重寫hashcode()、equals()方法,而且這兩個方法必須一起重寫,如果唯寫其中的一個會出現難以描繪的錯誤。而且這兩個方法要一致。在java7之前這個工作還是有一定難度的,因為產生高效的hash值是一個困難的工作。所以在java7之前實現這兩個方法,最好藉助於成熟的類庫,比如guava。但是java7之後,java把guava中這兩個工具方法加到了標準類庫中,因此我們可以直接使用。以下是程式碼範例:
@Override public boolean equals(Object obj) { if (obj == null) return false; if (obj == this) return true; if (!(obj instanceof Address)) return false; final Address other = (Address) obj; return Objects.equal(this.houseNumber, other.houseNumber) && Objects.equal(this.street, other.street) && Objects.equal(this.city, other.city) && Objects.equal(this.stateOrProvince, other.stateOrProvince) && Objects.equal(this.country, other.country); } @Override public int hashCode() { return Objects.hashCode( this.houseNumber, this.street, this.city, this.stateOrProvince, this.country); }
java類hashcode()、equals()、toString()方法