2013-08-07 3 views
5

मैं बलोच के प्रभावी जावा से विषम कंटेनर पैटर्न बाहर की जाँच कर रहा हूँ और मैं निर्धारित करने के लिए क्यों वर्ग संदर्भ जब विषम कंटेनर में वस्तुओं डालने की जरूरत है कोशिश कर रहा हूँ। क्या मैं इस संदर्भ को प्राप्त करने के लिए instance.getClass() का उपयोग नहीं कर सकता? क्या जेपीए का entity manager इसका उदाहरण नहीं है?जब एक प्रकार सुरक्षित विषम कंटेनर में वस्तुओं डालने, हम क्यों वर्ग संदर्भ की जरूरत है?

interface BlochsHeterogeneousContainer { 

    <T> void put(Class<T> clazz, T instance); 

    <T> T get(Class<T> clazz); 
} 

interface AlternativeHeterogeneousContainer { 

    // Class<T> not needed because we can use instance.getClass() 
    <T> void put(T instance); 

    <T> T get(Class<T> clazz); 
} 

उत्तर

5

नहीं, तुम ऐसा नहीं कर सकते, क्योंकि यह वास्तविक ऑब्जेक्ट प्रकार के वर्ग बल्कि, विरासत के मामले में संदर्भ प्रकार के आप वर्ग में नहीं डालेंगे।

Number num = new Integer(4); 
System.out.println(num.getClass()); 

इस प्रिंट होगा:

class java.lang.Integer 

और नहीं java.lang.Number

इस उदाहरण पर विचार।

+0

+1 वास्तव में है, इसलिए इंटरफ़ेस 'डाल (Number.class, संख्या)' या 'डाल (Integer.class, संख्या)' के रूप में उपयुक्त के लिए अनुमति देता है। –

+0

'(Integer.class, संख्या) डाल' एक संकलक त्रुटि फेंक होगा। यह समझ में आता है क्योंकि तर्क के प्रकार हैं (कक्षा , संख्या)। आप टी को इंटीजर सेट नहीं कर सकते क्योंकि संख्या एक इंटीजर नहीं है। आप टी नंबर क्योंकि क्लास एक कक्षा नहीं है निर्धारित नहीं कर सकते। फिर भी, यह अभी भी एक प्रकार पैरामीटर के लिए उपयोगी है क्योंकि आप 'put (Object.class, num)' जैसी चीजें कर सकते हैं। इस मामले में, टी ऑब्जेक्ट पर सेट है (और सभी नंबर ऑब्जेक्ट्स हैं इसलिए यह काम करता है)। – Cod3Citrus

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