2013-01-15 56 views
32

मैं प्रकार के पूर्णांक की एक ऐरेलिस्ट घोषित करना चाहता हूं।क्यों मैं ऐरेलिस्ट के प्रकार में int नहीं कर सकता?

क्यों निम्नलिखित मुझे एक त्रुटि देता है:

ArrayList<int> list1 = new ArrayList<int>(); 

लेकिन निम्न काम करता है:

ArrayList<Integer> list1 = new ArrayList<Integer>(); 
+4

का उपयोग चाहते हैं तो आप उपयोग कर सकते हैं 'TIntArrayList' अगर आप कुछ चाहते – MadProgrammer

+1

है जो wraps 'int []' –

+0

'int' आदिम डेटाटाइप है, हम 'ArrayList' –

उत्तर

34

ArrayList केवल संदर्भ प्रकार, प्राइमेटिव्स को संदर्भित कर सकते हैं। Integer एक वर्ग है, एक आदिम नहीं है।

जब आप घोषित ArrayList<Integer> list1 = new ArrayList<Integer>(), आप एक ArrayList जो Integer प्रकार, int आदिम नहीं स्टोर करेगा बना रहे हैं।

आप आदिम और संदर्भ प्रकार के बीच अंतर के बारे में पढ़ने के लिए चाहते हैं, http://pages.cs.wisc.edu/~hasti/cs302/examples/primitiveVsRef.html

+0

आपको शायद नई अभिव्यक्ति के दाईं ओर प्रकार तर्क की आवश्यकता नहीं है। 'ऐरेलिस्ट सूची 1 = नया ऐरेलिस्ट();' भी काम करता है। –

11

क्योंकि int एक आदिम प्रकार है। केवल संदर्भ प्रकार सामान्य पैरामीटर के रूप में उपयोग किया जा सकता है।

+0

में रैपर वर्ग का उपयोग कर सकते हैं जेनेरिक (जावा 5 से पहले) से पहले भी यह प्रतिबंध वहां था इसलिए मुझे नहीं लगता कि इसका एकमात्र कारण –

+0

@Pangea: Sure , आप 'नया ArrayList() नहीं जोड़ सकते हैं। (5) '। लेकिन ओपी त्रुटि wrt के बारे में पूछ रहा है कि कोड की विशेष पंक्ति ... –

+0

@OliCharlesworth आप वास्तव में ऐसा कर सकते हैं। यह सिर्फ 'इंटेगर' को 'int' मान नहीं जोड़ देगा। –

0

intprimitive है। यह Object नहीं है।

अधिक जानकारी के लिए यह link देखें।

+1

केवल लिंक को केवल स्टैक ओवरफ्लो पर प्रोत्साहित नहीं किया जाता है। –

4

की जाँच संक्षिप्त उत्तर है कि जेनरिक (जैसे ArrayList<Integer>) आदिम प्रकार (int), केवल वस्तुओं (Integer) को स्वीकार नहीं करते है।

ऐसा इसलिए है क्योंकि ArrayList जैसे वर्ग ऑब्जेक्ट्स के उपयोग के रूप में लागू किए जाते हैं। चूंकि प्रत्येक वर्ग ऑब्जेक्ट से विरासत में आता है, इसलिए संकलक बस अन्य वर्गों में प्लग कर सकता है। लेकिन आदिम प्रकार (जैसे int) ऑब्जेक्ट से प्राप्त नहीं होते हैं, क्योंकि वे कक्षाएं नहीं हैं। इसलिए, सूर्य/ओरेकल ने Integer कक्षा को इस में सहायता के लिए बनाया।

तो, संक्षेप में: intObject नहीं है।

+0

यह सबसे अच्छा जवाब है क्योंकि यह इस घोषणा को समझाता है, जो ठीक काम करता है: 'ऐरेलिस्ट ' –

0

पूर्णांक एक आदिम डेटा प्रकार है, लेकिन पूर्णांक एक वर्ग तो एक ArrayList सरणी केवल

0

सभी जवाब ऊपर जवाब अपने पैरामीटर नहीं आदिम प्रकार के रूप में संदर्भ प्रकार ले जा सकते हैं क्यों, लेकिन इस सवाल की जड़ अक्सर ऑटो मुक्केबाजी है और आदिम डेटा प्रकारों का अनबॉक्सिंग। यह समस्या पहले से ही इंटबफर या चाडबफर द्वारा हल की गई है या आप मूल प्रकार का नाम है जो पहले से ही एनओओ फ़ोल्डर में है। अगली बार जब आप क्योंकि `int` उसी संदर्भ` Integer` में एक वस्तु नहीं है आदिम ArrayList उपयोग करने के लिए उपयोग नहीं करते सूची के बजाय IntBuffer