संकलक, क्योंकि आप एक कच्चेArrayList
instantiating कर रहे हैं, नहीं अनुमान प्रकार करता है। लेकिन यह आपको चेतावनी देने के लिए पर्याप्त स्मार्ट है कि इस (कच्चे) ऑब्जेक्ट के साथ काम करते समय समस्या हो सकती है।
इस चेतावनी के पीछे कारण का उल्लेख करना उचित है। type erasure के कारण, List
के बारे में पैरामीट्रिक जानकारी (<Integer>
) पूरी तरह से रनटाइम पर चली जाएगी, जब परिवर्तक Object
प्रकार के तत्व रखेगा। इस स्निपेट पर विचार करें:
List rawList = new ArrayList(); //raw list
rawList.add(new String("hello"));
rawList.add(new Double(12.3d));
List<Integer> intList = rawList; // warning!
यह स्निपेट संकलन होगा, लेकिन कुछ चेतावनी उत्पन्न होगा। कच्ची सूची (rawList
) होने पर, आप String
, Double
इत्यादि सहित किसी भी गैर-आदिम प्रकार को सूची में जोड़ सकते हैं, लेकिन इस संग्रह को किसी सूची में निर्दिष्ट करते समय, जिसे केवल पूर्णांक रखने के लिए निर्दिष्ट किया गया है, तो यह एक है मुसीबत। रनटाइम पर intList
से कुछ तत्व लाने की कोशिश करते समय आपको ClassCastException
मिलेगा, जो Integer
माना जाता है, लेकिन वास्तविकता में String
या कुछ और है।
लंबी कहानी लघु - जेनिक्स के साथ कच्चे प्रकार का मिश्रण न करें!
आपके मामले में, संकलक संभवतः, प्रकार का अनुमान लगाया है होगा यदि आप हीरा का इस्तेमाल किया है:
List<Integer> list = new ArrayList<>(); //¯\_(ツ)_/¯
↑↑
स्रोत
2015-09-07 12:14:09
क्यों इस संकलक सूची की तुलना में अधिक जानकारी MyList = नए ArrayList() बाईं ओर के बाद से देता है सामान्य जानकारी availabe –
PKuhn
है क्योंकि दोनों शब्दार्थ अलग हैं। हीरा में प्रकार को छोड़ना सिंटैक्टिक सुझाव है। – lschuetze