我的技术博客经常被流氓网站恶意爬取转载。请移步原文:http://www.cnblogs.com/hamhog/p/3537367.html,享受整齐的排版、有效的链接、正确的代码缩进、更好的阅读体验。

Object 公共方法

equals

当你的对象里有的域允许 null 值时,实现 Object.equals 方法会很麻烦,因为你必须单独检查 null 。使用 Objects.equal 方法可以完成考虑null(null-sensitive)的 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

注意: JDK 7中新引入的 Objects 类提供了等价的 Objects.equals 方法。

hashCode

综合一个 Object 所有的域得到hash值的过程可以更简单。Guava的 Objects.hashCode(Object...) 方法可以综合指定的域序列得出一个合理的、与域顺序相关的(order-sensitive)hash值。使用 Objects.hashCode(field1, field2, ..., fieldn) 来代替手工计算 hash 。

注意: JDK 7中新引入的 Objects 类提供了等价的 Objects.hash(Object...) 方法。

toString

良好的 toString 方法对debug很有价值,但写起来很麻烦。使用 Objects.toStringHelper 来简便地编写可用的 toString 方法。以下是两个简单的例子:

    // Returns "ClassName{x=1}"
Objects.toStringHelper(this)
.add("x",1)
.toString(); // Returns "MyObject{x=1}"
Objects.toStringHelper("MyObject")
.add("x",1)
.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 != 0){
return cmp;
}
cmp = firstName.compareTo(other.firstName);
if(cmp != 0){
return cmp;
}
return Integer.compare(zipCode, other.zipCode);
}
}

这类代码容易杂乱,不易排除bug,而且冗长得让人烦。应该有更好的办法。

为此,Guava提供了 ComparisonChain 。

ComparisonChain 实施 "短路" 比较法:它在没有遇到非0(不等)结果之前,会一直比较下去;遇到了非0结果,就忽略后面的所有输入。

    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();
}

这种流畅的用法可读性强得多,不易受笔误影响,并且不会做无用功。其中的高级比较工具是Guava的“流畅版Comparator”中的Ordering类,参见这里

中文翻译自Guava官方文档:GuavaExplained - CommonObjectUtilitiesExplained 译者:戴仓薯

[Guava官方文档翻译] 5. Guava的Object公共方法 (Common Object Utilities Explained)的更多相关文章

  1. [Guava官方文档翻译] 1.Guava简介 (Introduction)

    用户指南 Guava包含Google在Java项目中用到的一些核心库:collections, caching, primitives support, concurrency 库, common a ...

  2. [Guava官方文档翻译] 7. Guava的Immutable Collection(不可变集合)工具 (Immutable Collections Explained)

    我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3538666.html ,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体 ...

  3. [Guava官方文档翻译] 2.使用和避免使用null (Using And Avoiding Null Explained)

    本文地址:http://www.cnblogs.com/hamhog/p/3536647.html "null很恶心." -Doug Lea "这是一个令我追悔莫及的错误 ...

  4. [Guava官方文档翻译] 3. 前置条件检查(Preconditions Explained)

    本文地址:http://www.cnblogs.com/hamhog/p/3536964.html 前置条件检查 Guava提供了一些检查前置条件的utilities.我们强烈建议静态import这些 ...

  5. [Guava官方文档翻译] 6. 用Guava辅助Throwable异常处理 (Throwables Explained)

    我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3537508.html ,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体 ...

  6. [Guava官方文档翻译] 4. 使用Guava Ordering排序 (Ordering Explained)

    本文地址:http://www.cnblogs.com/hamhog/p/3537233.html 示例 assertTrue(byLengthOrdering.reverse().isOrdered ...

  7. Object 公共方法详解

    在C#中,所有类型最终都从System.Object派生,所以每个类型的每个对象都保证了一组最基本的方法.具体地说,System.Object提供了一组公共实例方法. 一.Equals 如果两个对象具 ...

  8. cocos2dx 关于lua 绑定的环境配置官方文档翻译与 将自己定义c++方法绑定到lua的的方法

    网上有好多写如何讲自己定义的方法绑定到lua的文章,当中都仅仅对环境配置做了简单的介绍,看到有的帖子写在绑定中遇到了各种各样的error.大部分是因为环境配置不对导致的,下面是官方的文档有标准的说明, ...

  9. Log4j官方文档翻译(五、日志输出的方法)

    日志类提供了很多方法用于处理日志活动,它不允许我们自己实例化一个logger,但是提供给我们两种静态方法获得logger对象: public static Logger getRootLogger() ...

随机推荐

  1. iOS动画详解(二)

    UIImage常用的绘图操作   一个UIImage对象提供了向当前上下文绘制自身的方法.我们现在已经知道如何获取一个图片类型的上下文并将它转变成当前上下文.   平移操作:下面的代码展示了如何将UI ...

  2. 解决SenTestingKit/SenTestingKit.h: No such file or directory

    在一个iOS项目中引入了单元测试,感觉项目间的依赖关系有些乱,就建了一个新的Project,再把原来的.h和.m加进去,编译时竟然出现“SenTestingKit/SenTestingKit.h: N ...

  3. 实例:ABAP权限对象设计与权限检查的实现(详细)

    学习总结,分享给大家,,,(有图有真像) 我在ECC里创建了一张表,随意插入了5条数据 创建权限对象,使分配这个权限的用户只能操作部门编号(edept)为 ‘10’ 的数据. 1. SU20,创建权限 ...

  4. 利用sqlmap和burpsuite绕过csrf token进行SQL注入 (转)

    问题:post方式的注入验证时遇到了csrf token的阻止,原因是csrf是一次性的,失效导致无法测试. 解决方案:Sqlmap配合burpsuite,以下为详细过程,参照国外牛人的blog(不过 ...

  5. IPAD之分割视图 SplitViewController

    转载自:http://www.w3cschool.cc/ios/att-ios-ui-splitview-htm.html 1 分割视图的使用 分割视图是 iPad 的特定视图控制器用于管理两个视图控 ...

  6. setsockopt()使用方法(參数具体说明)

    int setsockopt(SOCKET s,int level,int optname,const char* optval,int optlen); s(套接字): 指向一个打开的套接口描写叙述 ...

  7. Java Swing界面编程(1)

    写多了jsp,对于页面式的系统已经写烦了,本人也開始着手于java swing的学习,作为菜鸟,仅想用博客记录下我的swing学习的历程.话不多说,首先開始我的第一个窗体化程序. 下面给出源码: pa ...

  8. .NET连接MySQL数据库的方法实现

    突然对.NET连接MySQL数据库有点兴趣,于是乎网上到处找资料,学习MySQL的安装,MySQL的使用等等等等,终于搞定了! 最终效果就是显示数据库中数据表的数据: 首先,当然要有MySQL数据库啦 ...

  9. linux中文输入法

    rpm方式.在安装盘上已经有各种语言包了.我们仅仅须要找到他们,并安装就能够了. 中文的是 fonts-chinese-3.02-9.6.el5.noarch.rpm fonts-ISO8859-2- ...

  10. select poll使用

    select poll使用     2.1. 怎样管理多个连接?“我想同一时候监控一个以上的文件描写叙述符(fd)/连接(connection)/流(stream),应该怎么办?” 使用 select ...