簡體   English   中英

實現equals()方法設計模式

[英]Implementation equals() method design pattern

是否有任何設計模式(或慣用語)有助於在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;

我總是使用以下代碼:

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之類的技術密鑰,而總是使用業務領域。 因此,我不認為這可以通用,而必須特定於任何給定的Class。

通常,要實現equals()方法,我要做的是:我從Eclipse生成那些,因為Eclipse可以很好地生成hashCode,toString和equals()方法。

在某種意義上決定兩個對象何時“相同”完全取決於您自己……當它們包含相同的數據(完全有效的用例)時,它們應該相等還是更嚴格地來說,當它們是相同的物理對象時,它們應該相等?內存(也有效)還是在集群環境中進行比較時數據庫中的同一行?

只要記住還要重寫.hashCode()否則您就陷入了痛苦的世界:-)

(此外,來自@Andreas和@flash的好的文章建議。)

干杯,

也許有幫助: 實現equals 特別要注意hashcode()和equals()之間的緊密關系。 除此之外,我想equals()的具體實現實際上取決於您的類設計,這意味着何時將兩個對象均等。

看看Java語言規范怎么說。

equals方法僅定義對象相等性的概念

除此之外,設計此方法不涉及任何設計模式。 事實是, equals方法已經由Java語言設計人員設計,您只能使用該設計。 如果您不確定如何編寫自己的equals方法,請考慮利用IDE的幫助(例如eclipse)為您完成工作。

不確定您的期望。 equals()用於定義比較類中兩個不同對象是否相等的條件。

通常,您一個一個地比較每個屬性,但是很有可能並且支持您僅使用較少的選定屬性進行比較。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM