-1

我有一个 java 项目,我需要身份比较(两个引用是否相同)和相等比较(两个对象是否包含相同的数据)。
我的解决方案是不覆盖 equals/hashcode,并向我的对象添加 isEqual 方法。
有没有更好的模式来处理这种情况?

编辑:
这是有关此特殊需求的更多信息。

默认情况下,我们有:

  • equals执行身份检查 (==)
  • contains是根据 来实现的equals,因此使用 ==

但对于我的用法,我想要:

  • equals执行相等检查(对象包含相同的数据)
  • contains继续执行 ==

我不能同时拥有两者,因此一种解决方案是实施我自己的平等检查并拥有:

  • contains保持不变,使用 ==
  • 实施isEqual和使用它而不是equals

另一个解决方案是实现我自己的使用 == 的包含:

  • 实现customContains使用 == 并使用它而不是contains
  • 覆盖equals以检查对象是否包含相同的数据

哪个最好?还有另一种更好的方法吗?

4

2 回答 2

7

重写该equals()方法以确定对象是否包含相同的数据。

用于==确定它们是否是相同的对象,即相同的引用。

于 2012-12-20T17:22:44.237 回答
3

执行此操作的最佳模式是遵循语言规范。覆盖 equals 和 hashcode,不要滚动你自己的相等,除非这是一个很大的问题,除非你之外的任何人都不会使用这个代码并且它永远不会改变。

如果您想将它们包装在一个名为 的函数中isEqual,即 hashcode 和 equals 方法,这是另一种方法,但这仍然意味着您正在覆盖 equals 和 hashcode,您声称您不想这样做。

isEqual本质上,您正在做的是创建一个非常僵化和/或损坏的 API,因为您的函数可能是非常不确定的,因此很难使用它,因此不会有太多用途。

于 2012-12-20T17:23:01.677 回答