0

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

这项任务并不难,但在大多数情况下,它几乎是一样的......这就是为什么我猜有一个模式,但我没有找到它。

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;
4

6 回答 6

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 之类的技术密钥,总是使用业务领域。因此,我不相信这可以通用,但必须特定于任何给定的类。

于 2012-10-11T06:54:24.490 回答
3

一般来说,要实现equals()方法,我所做的是:我从Eclipse生成这些,因为Eclipse可以很好地生成hashCode、toString和equals()方法。

于 2012-10-11T06:48:55.120 回答
1

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

只要记住也要覆盖.hashCode(),否则您将进入一个受伤的世界:-)

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

干杯,

于 2012-10-11T06:47:15.200 回答
1

也许这会有所帮助:实现 equals。尤其要注意 hashcode() 和 equals() 之间的密切关系。除此之外,我认为 equals() 的具体实现实际上取决于您的类设计,这意味着您何时将两个对象视为相等。

于 2012-10-11T06:47:23.190 回答
1

看看Java 语言规范是怎么说的。

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

除此之外,设计此方法不涉及设计模式。事实上,equalsJava 语言设计者已经设计了该方法,您只能使用该设计。如果您对如何编写自己的 equals 方法没有信心,请考虑借助 Eclipse 之类的 IDE 来为您完成这项工作。

于 2012-10-11T06:57:52.160 回答
0

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

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

于 2012-10-11T06:48:06.793 回答