मैंने अक्सर पढ़ा है कि जावा वाइल्डकार्ड एक अवधारणा है जो उपयोग-साइट भिन्नता की अवधारणा से अधिक शक्तिशाली है। लेकिन मेरी समझ में, जावा वाइल्डकार्ड की अवधारणा के बराबर है जो साइट-साइट भिन्नता की अवधारणा है।जावा वाइल्डकार्ड उपयोग-साइट भिन्नता से अधिक शक्तिशाली क्यों हैं?
तो दोनों के बीच क्या अंतर है? क्या आप एक ठोस उदाहरण दे सकते हैं जो जावा वाइल्डकार्ड के साथ संभव है लेकिन उपयोग साइट भिन्नता के साथ नहीं?
उदाहरण के लिए, How does Java's use-site variance compare to C#'s declaration site variance? के पहले उत्तर एक उदाहरण है जहाँ मेरे सवाल का दावा किया जाता है:
सबसे पहले, अगर मैं सही ढंग से याद है का उपयोग साइट पर विचरण से सख्ती से अधिक शक्तिशाली है declaration- साइट भिन्नता (हालांकि की लागत पर), या कम से कम जावा के वाइल्डकार्ड (हैं जो वास्तव में अधिक उपयोग-साइट भिन्नता से शक्तिशाली हैं)।
हालांकि, उत्तर यह नहीं बताता कि अंतर क्या है, केवल यही है।
संपादित करें: एक पहला अंतर मैं here (पृष्ठ 112 पर पहले पैराग्राफ) ने पाया है कि उपयोग साइट विचरण पूरी तरह से एक विधि गलत स्थिति में एक प्रकार पैरामीटर है कि जब वाइल्डकार्ड यह बुला की अनुमति बुला की अनुमति नहीं देता प्रतीत हो रहा है कुछ प्रकार के साथ। उदाहरण के लिए, आप पर add
पर कॉल नहीं कर सकते हैं। जावा वाइल्डकार्ड, आप कर सकते हैं इस तरह के एक वर्ग पर कॉल add
के साथ, लेकिन आप null
argument.For contravariance के रूप में, एक कर सकते हैं कॉल किसी भी विधि का एक contravariant पैरामीटर देता है उपयोग करने के लिए है, लेकिन एक माना कि वापसी प्रकार Object
है । लेकिन क्या यह एकमात्र अंतर है?
क्या यह इस प्रश्न से अलग है? http://stackoverflow.com/questions/4231305/how-does-javas-use-site-variance-compare-to-cs-declaration-site-variance –
@IsaiahvanderElst: नहीं, आपके द्वारा लिंक किया गया प्रश्न घोषणा साइट के बारे में है भिन्नता (उदाहरण के लिए, सी # ''''') बनाम साइट भिन्नता का उपयोग करें। मेरा सवाल उपयोग साइट भिन्नता बनाम वाइल्डकार्ड के बारे में है जो मेरे लिए बिल्कुल वही लगता है। लेकिन कम से कम आपके द्वारा लिखे गए प्रश्न में पहला जवाब मेरे दावे को बताता है: "या कम से कम जावा के वाइल्डकार्ड (जो वास्तव में उपयोग-साइट भिन्नता से अधिक शक्तिशाली हैं)" – gexicide
@IsaiahvanderElst: मैंने अपनी पिछली टिप्पणी की पहली वाक्य गलत तरीके से phrased। मैं जो कहना चाहता था वह था "** हां **, यह प्रश्न आपके द्वारा लिंक किए गए एक से अलग है।" उम्मीद है कि स्पष्टीकरण में यह स्पष्ट हो गया है। – gexicide