簡體   English   中英

如何使使用每字段等於而不是默認等於的Java接口/抽象類?

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

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