我的技术博客经常被流氓网站恶意爬取转载。请移步原文: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)的更多相关文章
-
[Guava官方文档翻译] 1.Guava简介 (Introduction)
用户指南 Guava包含Google在Java项目中用到的一些核心库:collections, caching, primitives support, concurrency 库, common a ...
-
[Guava官方文档翻译] 7. Guava的Immutable Collection(不可变集合)工具 (Immutable Collections Explained)
我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3538666.html ,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体 ...
-
[Guava官方文档翻译] 2.使用和避免使用null (Using And Avoiding Null Explained)
本文地址:http://www.cnblogs.com/hamhog/p/3536647.html "null很恶心." -Doug Lea "这是一个令我追悔莫及的错误 ...
-
[Guava官方文档翻译] 3. 前置条件检查(Preconditions Explained)
本文地址:http://www.cnblogs.com/hamhog/p/3536964.html 前置条件检查 Guava提供了一些检查前置条件的utilities.我们强烈建议静态import这些 ...
-
[Guava官方文档翻译] 6. 用Guava辅助Throwable异常处理 (Throwables Explained)
我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3537508.html ,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体 ...
-
[Guava官方文档翻译] 4. 使用Guava Ordering排序 (Ordering Explained)
本文地址:http://www.cnblogs.com/hamhog/p/3537233.html 示例 assertTrue(byLengthOrdering.reverse().isOrdered ...
-
Object 公共方法详解
在C#中,所有类型最终都从System.Object派生,所以每个类型的每个对象都保证了一组最基本的方法.具体地说,System.Object提供了一组公共实例方法. 一.Equals 如果两个对象具 ...
-
cocos2dx 关于lua 绑定的环境配置官方文档翻译与 将自己定义c++方法绑定到lua的的方法
网上有好多写如何讲自己定义的方法绑定到lua的文章,当中都仅仅对环境配置做了简单的介绍,看到有的帖子写在绑定中遇到了各种各样的error.大部分是因为环境配置不对导致的,下面是官方的文档有标准的说明, ...
-
Log4j官方文档翻译(五、日志输出的方法)
日志类提供了很多方法用于处理日志活动,它不允许我们自己实例化一个logger,但是提供给我们两种静态方法获得logger对象: public static Logger getRootLogger() ...
随机推荐
-
PHP设计模式之:单例模式
前 些日子开始着真正的去了解下设计模式,开始么,简单地从单例模式开始,当然网上看了一些资料,单例模式比较好理解,看看介绍,然后看看代码基本也就能够理 解了,设计模式这些的花点心思基本的是能够理 ...
-
Echarts给柱状图每一条顶部都添加数值
在 series中添加 itemStyle : { normal: {label : {show: true}}}, 不过目测要把markPoint等去掉,不然最大值和最小值会和label冲突,应该有 ...
-
MS SQL SERVER: msdb.dbo.MSdatatype_mappings &; msdb.dbo.sysdatatypemappings
--SQL转Oracle/DB2的类型对应关系SELECT *FROM msdb.dbo.MSdatatype_mappings; --MS SQL SERVER更详细得显示了ORACLE/DB2各个 ...
-
【原创】MIPS&#183;Verilog&#183;FPGA
时至今日,终于将全部的计划55条MIPS指令在FPGA上全部验证完毕,通过这近一个月的不断的修改调试.修改调试,我对整个流程对MIPS有了深刻的体会和认识.借着刚刚现阶段任务的兴奋和短暂的空闲时间,将 ...
-
MFC 之ActiveX控件学习
本文将介绍ActiveX控件的应用与工作原理,读者可以把ActiveX控件看成一个极小服务器的应用程序,它不能独立运行,必须要嵌入到容器程序中与容器一起运行,就像电脑主机中的显卡,它自己在电脑硬件系统 ...
-
WordPress BuddyPress Extended Friendship Request插件跨站脚本漏洞
漏洞名称: WordPress BuddyPress Extended Friendship Request插件跨站脚本漏洞 CNNVD编号: CNNVD-201307-609 发布时间: 2013- ...
-
安装windows7和ubuntu双系统后引导项设置
win7系统,U盘安装ubuntu,在选择[安装启动引导器的设备]时,1.如果你选择的是/dev/sda,即整个硬盘,他会将启动引导器使用grub进行系统引导,而不再使用windows loader, ...
-
重载 C 函数
在 clang 的扩展下,可以重载 C 函数,例如重载 sin 函数: float __attribute__((overloadable)) sin(float x) { return sinf(x ...
-
[JSOI2010] 连通数
Description Input 输入数据第一行是图顶点的数量,一个正整数N. 接下来N行,每行N个字符.第i行第j列的1表示顶点i到j有边,0则表示无边. Output 输出一行一个整数,表示该图 ...
-
ES6中Object.is方法比较两个值是否相等
Object.is: let obj={a:1,b:2}; Object.is(obj,obj);//true Object.is(obj,{obj});//false Object.is({},{} ...