2010-10-14 22 views
16
उदाहरण के लिए

, बजायजब आप ऑब्जेक्ट प्रकार निर्दिष्ट किए बिना एक ऐरेलिस्ट बनाते हैं, तो क्या आप पहली ऑब्जेक्ट जोड़ते समय इसे स्वचालित रूप से बनाते हैं?

ArrayList<ClassName> variableName; 

करने का आप

ArrayList variableName; 

कर फिर बाद में आप प्रकार का ऑब्जेक्ट "classname" जोड़ने

variableName.add(objectName); 

कि स्वचालित रूप से के प्रकार सेट हो जाएगा अपने सरणी

ArrayList<ClassName> 

?

+2

यदि आप इसे आजमाते हैं तो क्या होता है? –

+0

देखें http://download.oracle.com/javase/tutorial/java/generics/generics.html और http://download.oracle.com/javase/tutorial/java/generics/erasure.html – helpermethod

उत्तर

34

नहीं जेनिक्स केवल संकलन समय के लिए हैं। आप बस उस चेक का लाभ खो रहे हैं। रनटाइम पर सभी सामान्य जानकारी

मिटा दिया जाता है दूसरे शब्दों में,

ArrayList<Type> 

कार्यावधि में सिर्फ एक ArrayList है। केवल एक सूची में ऐसा करने का लाभ यह है कि जब आप अपना कोड लिख रहे हैं, तो संकलक जांच करेगा कि आप अपनी सूची में कुछ भी अनुचित नहीं हैं।

9

जब आप निर्दिष्ट नहीं करते हैं, तो यह वही होगा जैसे आपने ArrayList < ऑब्जेक्ट > निर्दिष्ट किया है, जिसका अर्थ है कि किसी भी प्रकार की ऑब्जेक्ट को ArrayList में जोड़ा जा सकता है। क्लास निर्दिष्ट करते समय किए गए प्रकार की जांच संकलन समय पर होती है, रनटाइम पर नहीं, इसलिए आपके द्वारा प्रस्तावित तरीके से काम करने के लिए चीजों के लिए यह संभव नहीं है (उन्हें रनटाइम पर निर्धारित अधिक विशिष्ट वर्ग होने के कारण)।

+1

मैं कहूंगा कि अर्थात् ArrayList का अर्थ है "इस सूची में संभावित रूप से किसी भी प्रकार की वस्तुएं होती हैं", जबकि ऐरेलिस्ट का अर्थ है "यह या तो विरासत कोड है या मैं इस सूची के तत्वों को कंपाइलर में निर्दिष्ट करने के लिए परेशान नहीं था"। – ninjalj

+0

निंजालज: फिर आप ArrayList पर क्या कहेंगे? मैं कहूंगा कि "इस सूची में संभावित रूप से किसी भी प्रकार की वस्तुएं हैं", जबकि एक ऐरेलिस्ट "यह ऑब्जेक्ट रखती है" .. – bwawok

7

वास्तविक प्रकार वास्तव में ArrayList है। ArrayList<ClassName> प्रकार केवल कंपाइलर के लिए मौजूद है (इसे मिरर कहा जाता है), और इसका उद्देश्य कंपाइलर स्तर पर प्रकार की सुरक्षा देना है। लेकिन बाइटकोड स्तर पर आपके पास सामान्य प्रकार का ज्ञान नहीं है।

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