क्या अंतर हैं List, List<?>, List<T>, List<E>, और List<Object>?
1. सूची
List: एक कच्चा प्रकार है, इसलिए नहीं typesafe। कास्टिंग खराब होने पर यह केवल रनटाइम त्रुटि उत्पन्न करेगा। हम एक बुरा समय त्रुटि चाहते हैं जब डाली खराब है। उपयोग करने के लिए अनुशंसित नहीं है।
2. सूची <?>
List<?>एक अनबाउंड वाइल्डकार्ड है। लेकिन मुझे यकीन नहीं है कि यह किस लिए है? मैं एक List<?>समस्या के बिना मुद्रित कर सकते हैं :
public static void test(List<?> list){
System.out.println(list); // Works
}
मैं आइटम क्यों नहीं जोड़ सकता हूँ List<?>?
public static void test(List<?> list){
list.add(new Long(2)); // Error
list.add("2"); // Error
System.out.println(list);
}
3. सूची <टी>
public static void test(List<T> list){ // T cannot be resolved
System.out.println(list);
}
मैं इस वाक्यविन्यास को नहीं समझता। मैंने ऐसा कुछ देखा, और यह काम करता है:
public <T> T[] toArray(T[] a){
return a;
}
कभी कभी, मैं देख रहा हूँ <T>, या <E>, या <U>, <T,E>। क्या वे सभी समान हैं या वे कुछ अलग करते हैं?
4. सूची <वस्तु>
यह त्रुटि देता है "विधि test(List<Object>)तर्क के लिए लागू नहीं है List<String>":
public static void test(List<Object> list){
System.out.println(list);
}
अगर मैं यह कोशिश करता हूं तो मुझे "इससे कास्ट नहीं किया जा सकता List<String>है List<Object>":
test((List<Object>) names);
मैं उलझन में हूं। Stringका एक उपवर्ग है Object, तो एक उपवर्ग क्यों नहीं List<String>है List<Object>?
2। मैं इसे प्रदर्शित करने के लिए कुछ कोड लिखता हूं2। tyvm