क्या अंतर हैं 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