Apache Commons 项目运用 - equals篇

Apache Commons Lang提供EqualsBuilder帮助简化Java对象的equals方法实现。本文介绍EqualsBuilder的使用,通过示例展示了如何避免编写复杂的equals逻辑,提高代码质量和效率。同时探讨了使用EqualsBuilder的一行式实现和反射API的优缺点。
摘要由CSDN通过智能技术生成
Commons Lang 是 Apache Commons 的一个组件,后者是一个宏大的项目,其中的很多子项目涉及到 Java? 语言软件开发的不同的方面。Commons Lang 扩展了标准 java.lang API,增加了字符串操作方法、基本数值方法、对象反射、创建和串行化以及System 属性。它还包含一个可继承的 enum 类型、对多种嵌套的 Exception 类型的支持、对 java.util.Date 的增强以及用于构建方法的实用程序,例如 hashCode、toString 和 equals。我发现 Commons Lang 对应用程序的很多方面都很有帮助。通过使用 Commons Lang,您将编写更少的代码,从而可以更快地交付缺陷更少的、生产就绪的软件。本教程从基本概念上逐步指导您如何使用一些不同的 Commons Lang 类,并利用它们的代码,从而不必自己编写那么多的代码。

对象契约
Commons Lang 库带有一套方便的类,它们统称为 builders。在本节中,您将学习如何使用其中一个类来构建 java.lang.Object equals 方法,以帮助减少编写的代码数量。

方法实现的挑战
所有 Java 类都自动继承 java.lang.Object。您可能已经知道,Object 类有 3 个方法通常需要被覆盖:
equals
hashCode
toString
equals 和 hashCode 方法的特殊之处在于,Java 平台的其他方面,例如集合甚至是持久性框架(包括 Hibernate),要依赖于这两个方法的正确实现。
如果您没有实现过 equals 和 hashCode,那么您可能会认为这很简单 — 但是您错了。Joshua Bloch 在 Effective Java 一书(参见 参考资料)以超过 10 页的篇幅论述了实现 equals 方法的特殊之处。如果最终实现 equals 方法,那么还需要实现 hashCode 方法(因为 equals 的契约表明,两个相等的对象必须有相同的散列码)。Bloch 又以 6 页的篇幅解释了 hashCode 方法。也就是说,至少有 16 页关于适当实现两个看上去很简单的方法的详细信息。
实现 equals 方法的挑战在于该方法必须遵从的契约。equals 必须:
具有反射性:
对于某个对象,foo(不为 null),foo.equals(foo) 必须返回 true。
具有对称性:
对于对象 foo 和 bar(不为 null),如果 foo.equals(bar) 返回 true,那么 bar.equals(foo) 也必须返回 true。
具有传递性:
对于对象 foo、bar 和 baz&#x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值