2013-09-04 2 views
5

मेरे पास कस्टम SwingWorker आंतरिक कक्षा है। मैंने कई बार पाया है कि उनके हैशकोड इसके विभिन्न उदाहरणों के लिए समान हैं। ऐसा क्यों है? सामान्य?हैशकोड एक आंतरिक वर्ग के विभिन्न उदाहरणों के लिए समान हो सकता है?

संपादित करें:

भीतरी वर्ग मैं SwingWorker वर्ग का एक उपवर्ग है।

+5

'' SwingWorker' hashCode' लागू नहीं है और इसलिए 'Object' के कार्यान्वयन कहा जाता है। इसके जावडोक पढ़ें। –

उत्तर

7

हैश कोड अलग-अलग वस्तुओं के लिए अलग होने की आवश्यकता नहीं है। एकमात्र आवश्यकता यह है कि वे बराबर वस्तुओं के लिए समान होना चाहिए।

यदि यह चिंता का विषय है कि आपकी SwingWorker आंतरिक कक्षाएं समान हैश कोड उत्पन्न करती हैं, तो आप अपनी आंतरिक आवश्यकताओं में उपयुक्त हैश कोड प्रदान करने के लिए अपनी आंतरिक कक्षा में hashCode विधि को ओवरराइड कर सकते हैं। बेशक आप equals ओवरराइड करने के लिए और साथ ही दोनों तरीकों के लिए मिलान तर्क की आपूर्ति करने की आवश्यकता होगी:

final int workerId = 123; 
SwingWorker<String,Object> myWorker = new SwingWorker<String,Object> { 
    @Override 
    public String doInBackground() { 
     ... 
    } 
    @Override 
    protected void done() { 
     ... 
    } 
    @Override 
    public int hashCode() { 
     return workerId; 
    } 
    @Override 
    public boolean equals(Object other) { 
     return other == this; 
    } 
} 
संबंधित मुद्दे