public void wahey(List<Object> list) {}
wahey(new LinkedList<Number>());
विधि को कॉल टाइप-चेक नहीं करेगा। इस प्रकार मैं भी पैरामीटर कास्ट नहीं कर सकते हैं:सूची <Number> क्यों उप-प्रकार की सूची <Object> नहीं है?
wahey((List<Object>) new LinkedList<Number>());
अपना शोध से, मैं इकट्ठे हुए हैं कि टाइप-सुरक्षा है इस की अनुमति नहीं दे के लिए कारण। हम ऊपर करने के लिए अनुमति दी गई थी, तो हम निम्नलिखित हो सकता है:
List<Double> ld;
wahey(ld);
विधि wahey के अंदर, हम इनपुट सूची में कुछ तार जोड़ सकता है (के रूप में पैरामीटर List<Object>
संदर्भ बनाए रखता है)। अब, विधि कॉल के बाद, ld एक प्रकार को संदर्भित करता है जिसमें List<Double>
है, लेकिन वास्तविक सूची में कुछ स्ट्रिंग ऑब्जेक्ट्स हैं!
जेनिक्स के बिना जावा काम सामान्य तरीके से अलग लगता है। उदाहरण के लिए:
Object o;
Double d;
String s;
o = s;
d = (Double) o;
क्या हम यहाँ क्या कर रहे हैं अनिवार्य रूप से एक ही बात है, सिवाय इस संकलन समय जांचों में कामयाब होगा और केवल रन-टाइम में असफल। सूची के साथ संस्करण संकलित नहीं होगा।
इससे मुझे विश्वास होता है कि यह जेनेरिक पर प्रकार के प्रतिबंधों के संबंध में एक डिजाइन निर्णय है। मैं इस फैसले पर कुछ टिप्पणियां लेने की उम्मीद कर रहा था?
संबंधित (सटीक डुप्लिकेट नहीं, हालांकि सही उत्तर मूल रूप से वही है): http: // stackoverflow।कॉम/प्रश्न/2512 9 8/क्यों-कुछ-कुछ-विशेष-टी-नहीं-समकक्ष-से-कुछ-जावा-जेनेरिक-प्रकार – Kip
कला की अवधि ** covariance ** है - मैं इसका उल्लेख करता हूं क्योंकि यह इसका कारण है स्टैक ओवरफ़्लो (यदि आप देखना चाहते हैं कि मुझे इसके बारे में क्या कहना है - सी # के संदर्भ में, लेकिन यह जावा पर भी लागू होता है - [covariance उपयोगकर्ता के लिए खोज: 95810], उदाहरण के लिए)। –
'वही' (सूची