Guava 提供了一系列针对Object操作的方法。
1. toString方法
为了方便调试重写toString()方法是很有必要的,但写起来比较无聊,不管如何,Objects类提供了toStringHelper方法,它用起来非常简单,我们可以看下面的代码:
public class Book implements Comparable<Book> { private Person author; private String title; private String publisher; private String isbn; private double price; /* * getter and setter methods */ public String toString() { return Objects.toStringHelper(this) .omitNullValues() .add("title", title) .add("author", author) .add("publisher", publisher) .add("price",price) .add("isbn", isbn).toString(); } }
注意,在新的版本中,使用MoreObjects类的toStringHelper替代原来的方法,原来的方法deprecated了。
2,检查是否为空值
firstNonNull方法有两个参数,如果第一个参数不为空,则返回;如果为空,返回第二个参数。
String value = Objects.firstNonNull("hello", "default value");
注意,此方法也已经废弃了,可以使用 String value = MoreObjects.firstNonNull("hello", "default value"); 来代替。
3,生成 hash code
public int hashCode() { return Objects.hashCode(title, author, publisher, isbn,price); }
4,实现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()); }
改进后的方法:
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(); }