मुख्य मूल प्रश्न यह है:
क्या एनोटेशन @EqualsAndHashCode (callSuper = true) या @EqualsAndHashCode (कॉलसुपर = गलत) जोड़ना उचित है?
स्वीकृत उत्तर मूल रूप से सिर्फ:
...वह निर्भर करता है...
उस पर विस्तार करने के लिए, @EqualsAndHashCode पर प्रलेखन का कुछ ठोस मार्गदर्शन है, जिस पर चयन करना है। विशेष रूप से यह, IMHO:
कॉलसुपर को सही पर सेट करके, आप अपने सुपरक्लास के समान और हैशकोड तरीकों को उत्पन्न तरीकों में शामिल कर सकते हैं। हैशकोड के लिए, सुपरहैशकोड () के परिणाम को हैश एल्गोरिथ्म में शामिल किया गया है, और फोरक्वाल्स, उत्पन्न विधि गलत हो जाएगी यदि सुपर कार्यान्वयन सोचता है कि यह ऑब्जेक्ट में पारित नहीं के बराबर है। ध्यान रखें कि सभी समान कार्यान्वयन इस स्थिति को ठीक से नहीं संभालते हैं। हालाँकि, लुम्बोक-जनरेटेड इक्वल्स इम्प्लीमेंटेशन इस स्थिति को ठीक से हैंडल करते हैं, इसलिए आप अपने सुपरक्लास को समान रूप से कॉल कर सकते हैं, यदि यह, एक लोबोक-जनरेटेड इक्वल्स विधि है।
इसे थोड़ा सा डिस्टिल करने के लिए: यदि आप किसी सुपरक्लास से विरासत में प्राप्त कर रहे हैं तो 'callSuper = true' को चुन लें, जिसमें या तो कोई राज्य सूचना नहीं है, या वह @Data एनोटेशन का उपयोग कर रहा है, या जिसमें इक्वल्स / हैश का कार्यान्वयन है "स्थिति को ठीक से संभालें" - जिसका अर्थ है कि मैं राज्य मूल्यों का एक उचित हैश लौटाने का मतलब है।