本節(jié)主要介紹對(duì)象的Utilities方法官还,包括檢查null值整袁,創(chuàng)建toString和hashCode方法告丢。
toStringHelper
Objects的toStringHelper方法剥槐,是在編寫對(duì)象toString方法時(shí)變得非常的簡單慨灭,如下面的代碼段:
public class Book implements Comparable<Book> {
private Person author;
private String title;
private String publisher;
private String isbn;
private double price;
....
public String toString() {
return Objects.toStringHelper(this)
.omitNullValues()
.add("title", title)
.add("author", author)
.add("publisher", publisher)
.add("price",price)
.add("isbn", isbn).toString();
}
omitNullValues方法將會(huì)忽略對(duì)象中所有指定屬性的空值朦乏。
檢查null值
String value = Objects.firstNonNull(someString,"default value");
firstNonNull需要指定兩個(gè)參數(shù),第一個(gè)someString為指定要檢查的對(duì)象氧骤,如果檢查的對(duì)象someString不為空呻疹,則直接返回someString;否則筹陵,返回第二個(gè)參數(shù)作為默認(rèn)值刽锤。
hashCode方法
和toString一樣,寫對(duì)象的hashCode是相當(dāng)無聊的朦佩。Objects類提供了hashCode方法:
public int hashCode() {
return Objects.hashCode(title, author, publisher, isbn);
}
實(shí)現(xiàn)CompareTo
首先讓我們來看看原始的實(shí)現(xiàn)CompareTo方法寫法:
public int compareTo(Book o) {
int result = this.title.compareTo(o.getTitle());
if (result != 0) {
return result;
}
result = this.author.compareTo(o.getAuthor());
if (result != 0) {
return result;
}
result = this.publisher.compareTo(o.getPublisher());
if(result !=0 ) {
return result;
}
return this.isbn.compareTo(o.getIsbn());
}
使用Guava中的ComparisonChain來實(shí)現(xiàn):
public int compareTo(Book o) {
return ComparisonChain.start()
.compare(this.title, o.getTitle())
.compare(this.author, o.getAuthor())
.compare(this.publisher, o.getPublisher())
.compare(this.isbn, o.getIsbn())
.compare(this.price, o.getPrice())
.result();
}
從上可以看出使用ComparisonChain來實(shí)現(xiàn)compareTo方法更簡潔并思,更可讀