मैं कोई जावा सुपर-विशेषज्ञ नहीं हूं, इसलिए मैं पूरी तरह से सुनिश्चित नहीं हूं कि मैं क्या कहूंगा। यहां मेरे विचार हैं:
चूंकि जावा मिटिक्स द्वारा जेनेरिक लागू करता है, प्रत्येक सामान्य प्रकार के लिए एक अंतर्निहित कच्चा प्रकार होता है। यदि आप एक सामान्य प्रकार को परिभाषित करते हैं, तो एक अंतर्निहित कच्चा प्रकार होगा जो Object
का उपयोग करेगा।
जब आप एक नया ArrayList
का दृष्टांत, यह संकलक इन्स्टेन्शियशन वर्ग से प्रकार पैरामीटर अनुमान लगाने के लिए के लिए (अपने उदाहरण में ArrayList<String>
) गलत होगा, के रूप में वहाँ है कि सही नाम और कोई प्रकार पैरामीटर के साथ एक वर्ग (जो है है कच्चा प्रकार, ArrayList
)। मुझे यह भी लगता है कि यही कारण है कि जावा 7 में आपको कंपाइलर को प्रकार का अनुमान लगाने के लिए कन्स्ट्रक्टर कॉल में <>
जोड़ना होगा।
कोई तर्क दे सकता है कि संकलक को केवल कच्चे प्रकार को तत्काल करना चाहिए जब परिभाषा वर्ग कच्चा प्रकार है, लेकिन मुझे लगता है कि यह भ्रमित होगा। मुझे लगता है कि संकलक को अपूर्ण अभिव्यक्तियों का अनुमान लगाना होगा जो किसी भी संदर्भ के साथ अमान्य होगा, जो new ArrayList()
कथन के मामले में नहीं है।
मुझे उम्मीद है कि यह स्पष्ट है, और यदि मैं गलत हूं तो कोई मुझे सही कर सकता है।
साइड नोट:
इसके अलावा, सावधान रहना है कि कच्चे वर्ग प्रकार प्रकार पैरामीटर के रूप में Object
का उपयोग कर के रूप में ही नहीं है:
List<String> list = new ArrayList();
, मान्य है जहां
List<String> list = new ArrayList<Object>();
के रूप में
नहीं है। पहले मामले में, कच्चे प्रकार का उपयोग किया जा सकता है जैसे कि यह एक सामान्य प्रकार था, लेकिन दूसरे मामले में आप contravariance के लिए पूछते हैं जो उपलब्ध नहीं है (यदि आप वाइल्डकार्ड का उपयोग नहीं करते हैं)।
क्या यह पूछने का कोई उद्देश्य है कि "भाषा एक्स क्यों विशेषता नहीं कर सकता है"? जवाब आमतौर पर "क्योंकि यह डिजाइन नहीं किया गया था"। – skaffman
क्यों! ओह क्यों! यह जावा में जेनेरिक कार्यान्वयन के बारे में मेरी सबसे बड़ी शिकायतों में से एक है। एक स्थिर फैक्ट्री विधि में कन्स्ट्रक्टर को लपेटने से टाइप अनुमान एक आकर्षण की तरह काम करता है, तो कन्स्ट्रक्टर के साथ क्यों नहीं! –
@ स्काफमैन: सच है, लेकिन भ्रमित चीज यह है कि पैरामीटरयुक्त तरीकों के लिए टाइप अनुमान मौजूद है, इसलिए कार्यान्वयन के नियम और जटिलता पहले से मौजूद है। वस्तु प्रत्याशा के लिए बस नहीं! –