[英]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.