本节主要介绍对象的Utilities方法,包括检查null值,创建toString和hashCode方法。
toStringHelper
Objects的toStringHelper方法,是在编写对象toString方法时变得非常的简单,如下面的代码段:
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方法将会忽略对象中所有指定属性的空值。
检查null值
String value = Objects.firstNonNull(someString,"default value");
firstNonNull需要指定两个参数,第一个someString为指定要检查的对象,如果检查的对象someString不为空,则直接返回someString;否则,返回第二个参数作为默认值。
hashCode方法
和toString一样,写对象的hashCode是相当无聊的。Objects类提供了hashCode方法:
public int hashCode() {
return Objects.hashCode(title, author, publisher, isbn);
}
实现CompareTo
首先让我们来看看原始的实现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来实现:
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来实现compareTo方法更简洁,更可读