शायद एक बेवकूफ सवाल है, लेकिन मैं इसे पेंच नहीं करना चाहता हूं। मान लें कि मेरे पास दो जावा कक्षाएं हैं, Class1
और Class2
, जहां Class2 extends Class1
है। मैं दोनों वर्गों के लिए गुवा का उपयोग करके Object.hashcode()
ओवरराइड करना चाहता हूं। सुपर क्लास के लिए, मुझे मिल गया हैएक गुवा ऑब्जेक्ट्स में सुपरक्लास को शामिल करने का सही तरीका है .शैशोड() कार्यान्वयन?
@Override
public int hashCode() {
return Objects.hashcode(mField1, mField2);
}
Class2 के लिए, hashCode लागू करने के लिए() है कि ध्यान में Class1 के सदस्यों लेता है सही तरीके से क्या है? क्या यह इस तरह है?
@Override
public int hashcode() {
return Objects.hashcode(super.hashcode(), mField3, mField4);
}
वह SEEMS मेरे लिए सही है, लेकिन मैं कुछ सत्यापन की तलाश में हूं। जोशुआ ब्लोच प्रभावी जावा में इस स्थिति को संबोधित नहीं करता है, और गुवा दस्तावेज़ भी नहीं हैं।
पूरी तरह से उचित कार्यान्वयन, अगर Class2 के उदाहरण की समानता के साथ-साथ Class1 के क्षेत्र पर प्रतिपादित किया जाता है (। उपप्रमेय एक ही तर्क hashCode() पर लागू होता है) बग विशिष्ट होना चाहिए) super.hashCode() पर निर्भर नहीं है। –
महान उत्तर और चर्चा, सभी को धन्यवाद। मेरे मामले में, मुझे कक्षा 1 और कक्षा 2 के उदाहरणों के बीच समानता का परीक्षण करने की आवश्यकता नहीं है, लेकिन नीचे दिए गए अंक जानने और समझने के लिए अच्छे हैं। –