实现equals()方法设计模式

时间:2012-10-11 06:42:28

标签: java design-patterns equals-operator

是否有任何设计模式(或习惯用法)有助于在Java中实现equals()方法?

这个任务太难了,但在大多数情况下它大致相同......这就是为什么我猜有一种模式,但我没有找到它。

UPDATE

我选择了方法:generate equals() method in Eclipse但是......我找到了一个很好的方法(在AbstractList中),以便更好地生成代码:

if (!(attributes ==null ? other.attributes==null : attributes.equals(other.attributes))) 
    return false; 

而不是生成:

if (attributes == null) {
        if (other.attributes != null)
        return false;
    } else if (!attributes.equals(other.attributes))
        return false;

6 个答案:

答案 0 :(得分:4)

我总是使用以下代码:

if (null == obj) return false;
if (this == obj) return true;
if (!(object instanceof MyClass)) return false;
MyClass that = (MyClass) obj;
EqualsBuilder eb = new EqualsBuilder();
eb.append(this.businessKey, that.businessKey);
return eb.isEquals();

...

我从不使用像序列或pk这样的技术键,总是使用商业领域。 因此,我不认为这可以是通用的,但必须特定于任何给定的类。

答案 1 :(得分:3)

通常要实现equals()方法,我所做的是:我从Eclipse生成那些,因为Eclipse可以很好地生成hashCode,toString和equals()方法。

答案 2 :(得分:1)

在某种意义上决定两个对象何时“相同”是非常自己的...当它们包含相同的数据(完全有效的用例)时它们是否相等或者当它们是相同的时更严格内存中的物理对象(也是有效的)或在集群环境中进行比较时,只是数据库中的同一行?

请记住也要覆盖.hashCode(),否则就会陷入伤害的世界: - )

(另外,来自@Andreas和@flash的好文章建议。)

干杯,

答案 3 :(得分:1)

也许这会有所帮助:Implementing equals。特别要注意hashcode()和equals()之间的密切关系。除此之外,我认为equals()的具体实现真的取决于你的类设计,意味着你什么时候对待两个对象。

答案 4 :(得分:1)

看看Java Language Specification要说些什么。

  

equals方法只定义了对象相等的概念

除此之外,设计此方法还没有涉及设计模式。事实上,equals方法已经由Java语言设计者设计,您只能使用该设计。如果你对如何编写自己的equals方法没有信心,可以考虑使用像eclipse这样的IDE帮助你。

答案 5 :(得分:0)

不确定您的期望。 equals()用于定义比较类的两个不同对象的相等标准。

通常,您逐个比较每个属性,但它非常可能,并支持您仅使用较少的选定属性进行比较。