आप निश्चित रूप से जावा जेनरिक पर इस ट्यूटोरियल पढ़ना चाहिए: http://docs.oracle.com/javase/tutorial/java/generics/
संक्षेप में:
कई जावा वर्गों और प्रकार (जेनेरिक वर्ग या जेनेरिक प्रकार), आमतौर पर संग्रह, टाइप कहा जाता है इस तरह के ArrayList<E>
में E
के रूप में ई मापदंडों, (E
सिर्फ एक मनमाना चुना नाम है, अन्य वर्गों T
के रूप में यह नाम या जो कुछ भी):
public class ArrayList<E> extends ... {
public E get(int index) { ... }
public boolean add(E element) { ... }
// other methods...
}
अब, जब आप इस तरह के वर्ग का एक उदाहरण बनाने के लिए, आप एक ठोस परिभाषित अब से
ArrayList<String> stringList = new ArrayList<String>();
, सभी E
रों String
द्वारा "की जगह" कर रहे हैं 01 के लिए: प्रकार पैरामीटर का मान उदाहरण String
के लिए, (E
आमतौर पर आप चाहते हैं जो कुछ भी प्रकार के लिए मूल्यांकन किया जा सकता)परिवर्तनीय, ताकि आप केवल स्ट्रिंग्स जोड़ सकें और केवल स्ट्रिंग प्राप्त कर सकें। आप के लिए संकलक जांच करता है कि आप गलती से किसी दूसरे प्रकार का ऑब्जेक्ट न जोड़ें:
stringList.add(Integer.valueOf(1));
// compile error - cannot add Integer to ArrayList of Strings
हालांकि, क्योंकि जेनरिक जावा 5 में जोड़ा गया था, यह अभी भी संभव है पश्च संगतता के लिए उनके बिना कोड लिखने के लिए । तो आप लिख सकते हैं:
ArrayList list = new ArrayList();
लेकिन आप सभी प्रकार की जांच लाभ खो देते हैं। विधि हस्ताक्षर में E
एस बस Object
एस बन गया है।
list.add(Integer.valueOf(42)); // adding an Integer
list.add("aaa"); // adding a String
Object something = list.get(0); // unknown type of returned object, need to cast
Integer i0 = (Integer) something; // this unsafe cast works...
Integer i1 = (Integer) list.get(1); // but this fails with a ClassCastException
// because you cannot cast a String to Integer
तथ्य यह है कि एक कच्चे प्रकार (कि छोड़े गए अपनी तरह के मानकों के साथ एक सामान्य प्रकार है) का उपयोग कर असुरक्षित है, चेतावनी आप मिल गया है के लिए कारण है। ArrayList
के बजाय, ArrayList<String>
या ArrayList<Integer>
या जो भी items
का प्रकार है उसका उपयोग करें।
वाह इस के लिए धन्यवाद! बहुत स्पष्ट स्पष्टीकरण @ नोटिक्स। +1 – KarenAnne
कैन आप पूछे गए प्रश्न के लिए सही समाधान देते हैं? – Satish