java:同时需要身份和平等

时间:2012-12-20 17:21:21

标签: java design-patterns

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

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

默认情况下,我们有:

  • equals执行身份检查(==)
  • contains正在equals实施,因此使用==

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

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

我不能同时拥有两个,所以一个解决方案是实现我的 自己的平等检查并具有:

  • contains使用==
  • 保持不变
  • 实施isEqual并使用它代替equals

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

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

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

2 个答案:

答案 0 :(得分:7)

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

使用==确定它们是否是同一个对象,即相同的参考。

答案 1 :(得分:3)

执行此操作的最佳模式是遵循语言规范。覆盖equals和hashcode,并且不要滚动你自己的平等 UNLESS 这是一个很大的事情,除非你以外没有人会使用这个代码 AND 它永远不会永远更改。

如果你想将它们包装在一个名为isEqual的函数中,那么hashcode和equals方法就是另一种方法,但它仍然意味着你要重写equals和hashcode,你声称你不想要要做。

基本上你正在做的是创建一个非常严格和/或破坏的API,由于你的isEqual函数可能非常不确定,因此难以使用很多用法。