अपने दूसरे सवाल का जवाब करने के लिए, हाँ, यदि आप एक List<Object>
या किसी भी प्रकार की एक List<T>
रूप List<?>
डाल सकता है, क्योंकि ?
(वाइल्डकार्ड) पैरामीटर इंगित करता है कि सूची एक किसी भीObject
का एक समरूप संग्रह है। हालांकि, type
को संकलित करने के बारे में जानने का कोई तरीका नहीं है क्योंकि यह केवल निर्यातित एपीआई का हिस्सा है - जिसका अर्थ है कि आप List<?>
में क्या डाला जा रहा है। के लिए एक वस्तु एक सामान्य वर्ग में प्रयोग की जाने वाली यह Object
की एक उप-प्रकार होना चाहिए, क्योंकि क्रम में
List<?> wildcardList = methodThatReturnsWildcardList();
// generates Unchecked cast compiler warning
List<Object> objectReference = (List<Object>)wildcardList;
इस मामले आप चेतावनी को अनदेखा कर सकते हैं:
का तरीका यहां बताया डाली होगा है। आइए दिखाएं कि हम इसे List<Integer>
के रूप में डालने की कोशिश कर रहे हैं जब वास्तव में String
एस का संग्रह होता है।
// this code will compile safely
List<?> wildcardList = methodThatReturnsWildcardList();
List<Integer> integerReference = (List<Integer>)wildcardList;
// this line will throw an invalid cast exception for any type other than Integer
Integer myInteger = integerRefence.get(0);
याद रखें: जेनेरिक प्रकार रनटाइम पर मिटा दिए जाते हैं। आपको पता नहीं होगा कि संग्रह में क्या है, लेकिन आप इसका तत्व निर्धारित करने के लिए एक तत्व प्राप्त कर सकते हैं और .getClass()
पर कॉल कर सकते हैं।
Class objectClass = wildcardList.get(0).getClass();
स्रोत
2016-04-15 20:32:30
ठीक है, अगर आप कहते हैं कि 'सूची >' को तत्काल नहीं किया जा सकता है, तो यह तरीका कैसा है? – Chris
यह ध्यान देने योग्य है कि 'Arrays.asList (टी ... ए)' एक 'सूची 'देता है। आप 'सूची' को 'सूची