Guava 指南 之「通用 Object 方法」
来源:互联网 发布:网络打印被挂起 编辑:程序博客网 时间:2024/06/07 00:09
通用 Object 方法
equals
当你的对象含有的多个字段可能为null
的时候,实现Object.equals
会很痛苦,因为你不得不分别对它们进行null
检查。使用Objects.equal
能够帮助你用一个对null
敏感的方式执行equals
检查,而不必冒着抛出NullPointerException
的风险。例如:
Objects.equal("a", "a"); // returns trueObjects.equal(null, "a"); // returns falseObjects.equal("a", null); // returns falseObjects.equal(null, null); // returns true
注意:在 JDK 7 中提供了等效的Objects.equals
方法。
hashCode
散列一个对象的所有字段应该更简单。Guava 的Objects.hashCode(Object...)
会对指定的字段构建出一个合理的、顺序敏感的散列值。我们应该使用Objects.hashCode(field1, field2, ..., fieldn)
来代替手工的构建散列值。
注意:在 JDK 7 中提供了等效的Objects.hash(Object...)
方法。
toString
一个好的toString
方法在调试时是无价之宝,不过编写toString
方法却有些痛苦。使用MoreObjects.toStringHelper
可以让你非常轻松的创建一个有用的toString
方法。例如:
// Returns "ClassName{x=1}" MoreObjects.toStringHelper(this) .add("x", 1) .toString(); // Returns "MyObject{x=1}" MoreObjects.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); }}
这段代码冗长、混乱,而且不便调试。我们应该能够做的更好。为此,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();}
这种流畅的风格更具可读性,发生错误的几率更小,并且足够聪明以避免不必要的工作。在 Guava 的“流畅比较器”类Ordering
中,我们能够看到更多的比较器工具。
翻译声明:本文翻译自 GitHub,Google Guava - CommonObjectUtilitiesExplained.
———— ☆☆☆ —— 返回 -> Guava 中文指南 <- 目录 —— ☆☆☆ ————
- Guava 指南 之「通用 Object 方法」
- Guava 指南 之「Throwable」
- Guava 指南 之「前置条件」
- Guava 指南 之「使用和避免 null」
- [Google Guava] 1.3-常见Object方法
- [Google Guava] 1.3-常见Object方法
- [Google Guava] 1.3-常见Object方法
- Guava学习笔记:复写的Object常用方法
- Guava学习笔记:复写的Object常用方法
- Guava(二):重写的那些Object方法
- Java-类库-Guava-复写的Object常用方法
- 【Java8】Guava——Object方法和排序
- Guava学习笔记【4】:复写的Object常用方法
- JavaScript:通用的Object属性和方法
- Object对象的通用方法-equals、hashCode
- Object对象的通用方法-clone
- Google Guava 中文指南
- Object之toString方法
- 单链表
- centOS安装搜索工具locate报错
- java Class 的加载时机
- Dynamic Programming:121. Best Time to Buy and Sell Stock
- Windows Practice_Dll&Hook_封装IAT Hook
- Guava 指南 之「通用 Object 方法」
- Pseudo-terminal will not be allocated because stdin is not a terminal
- 数组中的最大递增子序列(Longest Increasing Subsequence<LIS>)
- Java 基础集合遍历删除 for与foreach区别
- 算法第三周Reverse Integer[easy]
- LeetCode#670 Maximum Swap题解(C++版)
- JSON基本使用
- Python Computer Vision Programming学习笔记(一)——Python以及各Package安装
- Java的三大特征