कैसे आते हैं, जावा में, मैं लिख सकते हैंजावा जेनरिक: सूची <Container<?>> = नया लिंक्डलिस्ट <कंटेनर <Double>>() निषिद्ध है?
List<?> list = new LinkedList<Double>();
नहीं बल्कि
List<Container<?>> list = new LinkedList<Container<Double>>();
जहां कंटेनर जैसे
public class Container<T> { ... }
कुछ इस आया क्योंकि मैं एक विधि है कि स्वीकार करता है List<Container<?>>
, और मैं Arrays.asList का उपयोग तर्कों को पास करने के लिए करना चाहता हूं:
process(Arrays.asList(new Container<Double>(), new Container<Double>()));
लेकिन भाषा इस की अनुमति नहीं है, क्योंकि यह Arrays.asList
के प्रकार infers List<Container<Double>>
होने के लिए, और कहा कि List<Container<?>>
को आबंटित नहीं है।
अगर मैं कॉल करने के लिए एक स्ट्रिंग-पैरामिट्रीकृत कंटेनर जोड़ने के लिए,
process(Arrays.asList(new Container<Double>(), new Container<String>()));
यह अभी भी काम नहीं करता है, क्योंकि यह Arrays.asList के लिए प्रकार List<Container<? extends Serializable & Comparable<?>>>
infers। केवल अगर मैं ऐसा कुछ करता हूं जो न तो तुलनात्मक है और न ही Serializable यह ठीक से काम करता है।
बेशक, मैं एक कलाकार डाल सकता हूं और संकलक को बंद करने के लिए प्राप्त कर सकता हूं, लेकिन मुझे आश्चर्य है कि मैं यहां कुछ गलत कर रहा हूं।