2013-04-24 6 views
7

मैं चेनिंग का उपयोग कर हैश टेबल के लिए डेटा संरचना लिखने की कोशिश कर रहा हूं। जब मैं नेस्टेड क्लास से "स्थिर" कीवर्ड को हटा देता हूं, तो मुझे त्रुटि मिलती है कि "अलग चार्जिंग नोड का जेनेरिक सरणी नहीं बना सकता"? उस लाइन पर जहां मैं नए का उपयोग करके एचएमएपी करने के लिए स्मृति आवंटित करता हूं।जेनेरिक बाहरी क्लास के लिए, मुझे नेस्टेड क्लास स्थैतिक घोषित करने की आवश्यकता क्यों है?

स्थिर कीवर्ड के साथ यह ठीक काम करता है। क्या कोई भी यहां कीवर्ड की महत्व का महत्व बता सकता है और इससे क्या अंतर आता है? मैं ऑब्जेक्ट की सरणी बना रहा हूं, फिर यह त्रुटि (ग्रहण) में जेनेरिक सरणी कैसे दिखाता है?

public class SeparateChaining<Key,Value> { 

    private int m; 

    private Node[] hmap; 

    private int n; 

    public SeparateChaining() 
    { 
     m=5; 
     n=0; 

     //error here on removal of static keyword from the node class declaration 
       hmap=new Node[m]; 

    } 

    private ____ class Node //works fine with static. Otherwise shows error 
    { 
     private Object key; 
     private Object value; 
     private Node next; 

     public Node(Object k, Object v) 
     { 

      key=k; 
      value=v; 
     } 

    } 

धन्यवाद

+0

'कुंजी' का प्रकार 'कुंजी 'नहीं होना चाहिए और' मान' का प्रकार 'मान' होना चाहिए (ऑब्जेक्ट' नहीं)? और कन्स्ट्रक्टर पैरामीटर के लिए वही? – Dukeling

उत्तर

6

जैसा माना जाता है यदि आप आंतरिक Node कक्षा static के रूप में घोषित करते हैं, तो कक्षा बाहरी कक्षा SeparateChaining से जुड़ी है। Node वास्तव में SeparateChaining.Node है।

static के बिना, यह SeparateChaining के उदाहरण से जुड़ा होगा, जिसमें दो प्रकार के पैरामीटर की आवश्यकता होगी, इस प्रकार आंतरिक Node कक्षा को उन प्रकार के पैरामीटर की भी आवश्यकता होगी। Node वास्तव में SeparateChaining<Key, Value>.Node है; और जावा में, creating an array of generics कानूनी नहीं है।

+0

उपर्युक्त में जोड़कर यह काम करता है यदि आप नोड IndoKnight

+0

@ डिकलिंग का प्रयास करते हैं तो प्रोग्राम का अर्थ थोड़ा सा बदल जाएगा, क्या मैं सही हूँ? –

+0

उस स्थिति में, नोड का प्रकार पैरामीटर बाहरी 'पृथकChaining' के प्रकार पैरामीटर के समान नहीं होगा; यह उस मूल्य को छायांकन करने के बजाए छाया करेगा। –

0

खैर, यह सामान्य है। यदि आंतरिक वर्ग स्थिर नहीं है तो प्रकार SeparateChaining<Key,Value>.Node है। जब आप स्थैतिक जोड़ते हैं तो इसे नियमित कक्षा

-1

नेस्टेड कक्षा की घोषणा में कीवॉर्ड static का अर्थ है "मैं बाहरी वर्ग की किसी वस्तु का संदर्भ नहीं लेना चाहता हूं, बहुत बहुत धन्यवाद"। यदि आप static नहीं डालते हैं, तो आंतरिक वर्ग के किसी ऑब्जेक्ट में बाहरी वर्ग के कुछ ऑब्जेक्ट का संदर्भ होता है।

और इस प्रकार आंतरिक, गैर स्थैतिक वर्ग का एक वस्तु बाहरी वर्ग की वस्तु के एक गैर स्थैतिक विधि के भीतर ही बनाया जा सकता है।

संबंधित मुद्दे