原文链接 译者: 沈义扬

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

[Google Guava] 1.3-常见Object方法

注意: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", ).toString();
// Returns "MyObject{x=1}"
Objects.toStringHelper("MyObject").add("x", ).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 != ) {
return cmp;
}
cmp = firstName.compareTo(other.firstName);
if (cmp != ) {
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方法

最新文章

  1. Python学习笔记之字典
  2. 【hibernate 报错】No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer 【get和load的区别】
  3. POJO类中的任何布尔类型的变量,都不要加is
  4. apple store链接格式文档
  5. 源码搭建SVN+Apache+Setpass
  6. jQuery&amp;HTML&amp;CSS3实现垂直手风琴折叠菜单方法讲解
  7. linxu安装OSX
  8. eclipse中默认的提示键
  9. iOS7 文本转语音 AVSpeechSynthesizer
  10. FineUI Grid 缓存列显示隐藏状态
  11. ZOJ 2059 The Twin Towers
  12. Java复习随笔
  13. Xamarin.Forms(一) Visual Studio 连接安卓模拟器(逍遥安卓)
  14. 《万能数据库查询分析器》实现使用SQL语句直接高效地访问文本文件
  15. C语言--第0份作业
  16. 【转】WPF自定义控件与样式(11)-等待/忙/正在加载状态-控件实现
  17. FPKM与RPKM
  18. jmeter测试soap协议时候 路径不需要添加
  19. 整合ssm框架之配置文件
  20. sql多表更新使用别名(小技巧)

热门文章

  1. 【LOJ】#2210. 「HNOI2014」江南乐
  2. Java搭建环境和工具安装详细教程
  3. 剑指offer30:连续子数组的最大和
  4. 使用 jsvc 启动tomcat(使用普通用户运行)
  5. 给内部类对象数组属性赋值时报错:Exception in thread "main" java.lang.NullPointerException
  6. Go 标准库,常用的包及功能
  7. Mysql连接数设置
  8. 基于【 centos7】二 || 系统时间与网络时间同步
  9. [Vuex系列] - 初尝Vuex第一个例子
  10. Xmind ZEN破解版来袭:如何去除水印