मैं काम पर कोडर्स में जोशुआ ब्लोच के साथ एक साक्षात्कार पढ़ रहा था, जहां उन्होंने जावा 5 में जेनरिक के परिचय को शोक व्यक्त किया। उन्हें विशिष्ट कार्यान्वयन पसंद नहीं है क्योंकि भिन्नता-जावा के वाइल्डकार्ड-इसे अनावश्यक रूप से जटिल बनाते हैं।सी # जेनेरिक - डिजाइन द्वारा कम सीमा के बिना?
जहां तक मुझे पता है, सी # 3 में स्पष्ट, बाध्य वाइल्डकार्ड जैसे कुछ भी नहीं है, उदा। आप एक विधि PriceBatch घोषित नहीं कर सकते हैं जो संपत्ति या किसी भी संपत्ति उपclass (void PriceBatch(Collection<? extends Asset> assets)
जावा में) का संग्रह एकत्र करता है?)।
क्या किसी को पता है कि वाइल्डकार्ड और सीमाएं सी # में क्यों नहीं शामिल की गई हैं? क्या इन सुविधाओं को जानबूझकर भाषा को सरल बनाने के लिए छोड़ दिया गया था, या यह ऐसा कुछ है जिसे वे अभी तक लागू करने के लिए नहीं मिला है?
संपादित करें: पवित्र धुआं, एरिक लिपर्ट से खुद की टिप्पणियां! उसके और पॉल व्यावहारिक टिप्पणियां पढ़ने के बाद, मुझे लगता है कि कम से कम ऊपरी सीमा का समर्थन कर रहे एहसास है और ऊपर के उदाहरण सी # करने के लिए अनुवाद किया जा सकता है कि के रूप में:
void PriceBatch<T>(ICollection<T> assets) where T : Asset
निचले सीमा, दूसरे हाथ पर, जाहिरा तौर पर एरिक के रूप में समर्थित नहीं हैं अपनी दूसरी टिप्पणी में कहते हैं, उदाहरण के लिए
public class Asset {}
public class Derivative extends Asset {}
public class VanillaOption extends Derivative {}
public static <T extends Asset> void copyAssets(Collection<T> src, Collection<? super T> dst) {
for(T asset : src) dst.add(asset);
}
Collection<VanillaOption> src = new ArrayList<VanillaOption>();
[...]
Collection<Derivative> dst = new ArrayList<Derivative>();
[...]
copyAssets(src, dst);
मैं सही हूँ: वहाँ शायद कोई रास्ता सीधे सी # करने के लिए इस (कुछ काल्पनिक) जावा कोड का अनुवाद करने में है? यदि यह मामला है, तो क्या कोई विशेष कारण है कि सी # ऊपरी है लेकिन कम सीमा नहीं है?
मैं सवाल समझ में नहीं आता; सी # ने जेनेरिकों को बाध्य किया है और सी # के बाद से है। क्या आप उस जावा पर प्राप्त कर रहे हैं * कॉल-साइट * कॉन्वर्सिस और निर्मित जेनेरिक प्रकारों पर contravariance? क्योंकि सी # इसका समर्थन नहीं करता है; सी # 4 * घोषणा-साइट * भिन्नता का समर्थन करेगा। –
या आप इस तथ्य पर क्या प्राप्त कर रहे हैं कि जेनेरिक तरीकों पर पैरामीटर सीमाएं केवल सीमाओं से प्राप्त होनी चाहिए, और सीमा से प्राप्त नहीं होना चाहिए? सी # उत्तरार्द्ध का समर्थन नहीं करता है; जावा और स्कैला मुझे विश्वास है। –
धन्यवाद, मैंने प्रश्न अपडेट किया है। – ehnmark