我有一个java项目,我需要两个身份比较(2个引用相同)和相等比较(两个对象包含相同的数据)。
我的解决方案是不覆盖equals / hashcode,并向我的对象添加isEqual方法
是否有更好的模式来处理这种情况?
编辑:
以下是有关此特殊需求的更多信息。
默认情况下,我们有:
equals
执行身份检查(==)contains
正在equals
实施,因此使用== 但是对于我的用法我想要:
equals
执行相等检查(对象包含相同的数据)contains
继续使用== 我不能同时拥有两个,所以一个解决方案是实现我的 自己的平等检查并具有:
contains
使用== isEqual
并使用它代替equals
另一个解决方案是实现我自己的使用==:
的包含customContains
以使用==并使用它代替contains
equals
以检查对象是否包含相同的数据哪个最好?还有另一种更好的方法吗?
答案 0 :(得分:7)
重写equals()
方法以确定对象是否包含相同的数据。
使用==
确定它们是否是同一个对象,即相同的参考。
答案 1 :(得分:3)
执行此操作的最佳模式是遵循语言规范。覆盖equals和hashcode,并且不要滚动你自己的平等 UNLESS 这是一个很大的事情,除非你以外没有人会使用这个代码 AND 它永远不会永远更改。
如果你想将它们包装在一个名为isEqual
的函数中,那么hashcode和equals方法就是另一种方法,但它仍然意味着你要重写equals和hashcode,你声称你不想要要做。
基本上你正在做的是创建一个非常严格和/或破坏的API,由于你的isEqual
函数可能非常不确定,因此难以使用很多用法。