ठीक है, तो जावा की अनुमति नहीं है निम्नलिखित:जेनेरिक्स और वाइल्डकार्ड: जावा पसंद करती है "नए फू <Bar<?>>"
Foo<?> hello = new Foo<?>();
यह sense-- सब के बाद बना देता है, क्या जेनरिक की बात करता है, तो आप कर रहे हैं है वैसे भी सब कुछ बॉक्स/अनबॉक्स सब कुछ होगा? यह वास्तव में, अधिक पूरा करता है, हालांकि कुछ बिंदु पर, वहाँ एक डाली जो कुछ Bar
साथ काम कर रहा है प्राप्त करने के लिए हो सकता है,
Foo<Bar<?>> howdy = new Foo<Bar<?>>();
दी:
क्या अजीब है, जावा इस अनुमति नहीं है है। लेकिन अगर जावा कुछ विशिष्टता के साथ ठीक है, कारण है कि यह इस की अनुमति नहीं है ?:
Foo<? extends Mal> bonjour = new Foo<? extends Mal>();
एकमात्र कारण मैं पूछता हूँ मैं एक निर्माता के एक वर्ग के पैरामीटर के अंदर "वाइल्डकार्ड पर भरोसा करने की फिक्सिंग कर रहा हूँ है ", और गंभीरता से इसके पीछे के प्रभाव/इरादे को जानना पसंद करेंगे।
संपादित करें: मेरे प्रश्न को स्पष्ट करने के लिए, इन बयानों को किस आधार पर अनुमति/अस्वीकार किया गया है? मुझे पता है कि "जावा कन्स्ट्रक्टर में वाइल्डकार्ड की अनुमति नहीं देता है", लेकिन सवाल यह है कि क्यों यह सब अजीबता है? अगर नेस्टेड वाइल्डकार्ड ठीक हैं तो वाइल्डकार्ड को बाध्य क्यों नहीं किया जाता है?
मुझे लगता है कि मैं समझ रहा हूं कि आप क्या कह रहे हैं: यदि कोई कन्स्ट्रक्टर क्लास परम 'मल' स्वीकार करता है, तो उदाहरण मूल रूप से कुछ भी स्वीकार करता है जो 'मल' का उप-वर्ग है (हालांकि उदाहरण के लिए _reference_ को इंगित करने में सक्षम नहीं होगा एक उपclass के साथ जेनेरिक जब तक एक वाइल्डकार्ड निर्दिष्ट नहीं किया गया था।) – Philip
एक साल बाद मेरी टिप्पणी देख रहे हैं ... मुझे पूरा यकीन है कि मैंने कभी भी कहा है कि सबसे अचूक चीजों में से एक है। – Philip