[Guava源码分析]Objects 和 ComparisonChain:帮助重写Object方法
2014-07-28 22:30
399 查看
我的技术博客经常被流氓网站恶意爬取转载。请移步原文:http://www.cnblogs.com/hamhog/p/3874194.html,享受整齐的排版、有效的链接、正确的代码缩进、更好的阅读体验。
用来帮助重写Object的equals、hashCode、toString和compareTo方法的两个类。用法见文档。
-hashCode(x,y,z,...) hashCode组合,用来重写hashCode方法
-toStringHelper 用法:
// Returns "ClassName{x=1}"
Objects.toStringHelper(this)
.omitNullValues()
.add("x", 1)
.add("y", null)
.toString();
}
用来重写toString方法
-firstNonNull 用来设置为null时的默认值
1.链式调用 每个方法返回的都是自身引用。底层是一个链表{name,value,next}
2.toString方法 遍历链表
// create a copy to keep it consistent in case value changes
boolean omitNullValuesSnapshot = omitNullValues;
为用到的成员变量做一个snapShot,防止在方法途中改变
return ComparisonChain.start()
.compare(this.aString, that.aString)
.compare(this.anInt, that.anInt)
.compare(this.anEnum, that.anEnum, Ordering.natural().nullsLast())
.result();
}
-compare(a,b) compare(T,T,Comparator) compareTrueFirst compareFalseFirst
2.链式调用 分出胜负则返回GREATER/LESS 否则返回ACTIVE
用来帮助重写Object的equals、hashCode、toString和compareTo方法的两个类。用法见文档。
Objects
API
-equal 考虑null情况的equals-hashCode(x,y,z,...) hashCode组合,用来重写hashCode方法
-toStringHelper 用法:
// Returns "ClassName{x=1}"
Objects.toStringHelper(this)
.omitNullValues()
.add("x", 1)
.add("y", null)
.toString();
}
用来重写toString方法
-firstNonNull 用来设置为null时的默认值
重点方法
ToStringHelper1.链式调用 每个方法返回的都是自身引用。底层是一个链表{name,value,next}
2.toString方法 遍历链表
// create a copy to keep it consistent in case value changes
boolean omitNullValuesSnapshot = omitNullValues;
为用到的成员变量做一个snapShot,防止在方法途中改变
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();
}
API
-start()-compare(a,b) compare(T,T,Comparator) compareTrueFirst compareFalseFirst
重点方法
1.构造 单例模式,3个单例 ACTIVE GREATER LESS;ACTIVE会进行比较,GREATER/LESS直接返回2.链式调用 分出胜负则返回GREATER/LESS 否则返回ACTIVE
相关文章推荐
- jQuery静态方法isPlainObject,isEmptyObject方法使用和源码分析
- Java之类Object方法源码分析
- Object源码研究2——getClass()方法分析
- JAVA源码分析之---Object类(一)---registerNatives,getClass方法的使用
- [Guava源码分析](6)Objects分析
- guava学习(一)ComparisonChain 源码分析
- JAVA源码分析之---Object类(二)---hashCode,equals,clone方法的使用
- Object源码分析(二)-- hashcode方法
- 源码剖析HashMap--当key为Object时为什么要重写hashcode与equals方法
- Object源码分析(一)-- clone方法
- java的Arrays.sort(Object[] a)方法源码分析
- Guava(二):重写的那些Object方法
- Guava源码分析——Objects
- Weka源码分析(1)逆向工程Eclipse插件ObjectAid和AmaterasUML的安装方法
- 解读和分析Linux核心源码的两种方法
- Object 开发中常用的重写方法总结toString,equals,hashCode,compareTo
- 为基类没有重写Object.Equals 方法的引用类型实现Equals
- 整理 Object 类(为什么重写 equals 和 hashCode 方法)
- 源码分析DWR的Engine._execute方法
- 解读和分析Linux核心源码的两种方法