[英]How to make java interface / abstract class that uses per-field equals instead of default equals?
我有一個過程需要創建java類,該類將用作表中的鍵(作為Spark框架中的鍵)。 為了獲得正確的功能,我需要使用執行現場比較的函數覆蓋默認的對象equals()和哈希碼方法。 (我在Eclipse / Intellij中自動生成此代碼)。
問題是每次我創建一個新類或對現有類進行更改時,我都需要重新生成equals / hash。 這是一個有問題的過程,因為如果我忘記重新生成等於,則不會出現編譯錯誤。
在Java中,有什么方法可以創建默認具有按字段的equals / hash代碼的類?
您可以使用反射以“一般”方式實現這種檢查。 含義:使用反射自動獲取對象的所有字段; 並比較每個。
但是,當然,使用這樣的反射可能是殺死性能的好方法。
因此,一個更“嚴重”的答案是:考慮一下“需要創建Java類的過程”的工作原理。 也許您可以用自動化步驟代替“手動創建新Java類”。 含義:不要自己編寫Java類。 代替; 構建了一個生成器,可以為您創建這些類(包括equals和hashCode)。
或者,第三種不太嚴重的選擇:對這些類使用Scala。 創建“案例類”時; Scala編譯器會執行equals,hashCode,...等操作。
Lombok項目提供了此功能。 它包括在編譯過程中執行的注釋處理器。 它與Eclipse,maven,ant等兼容。 您應該只使用@EqualsAndHashCode
注釋您的類,它將自動為您創建equals和hashCode。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.