मैं एक .NET लड़का हूं, इसलिए मुझे पहले कुछ जावा अवधारणाओं की मेरी समझ पर जोर देना चाहिए - अगर मैं गलत हूं तो मुझे सही करें।जावा टाइप क्लास <> के लिए नेट समकक्ष?
class GenericClass< ? extends IInterface> { ... }
... जो नेट where
प्रतिबंध के समान है::
class GenericClass<T> where T: IInterface { ... }
जावा के Class
वर्ग एक प्रकार का वर्णन करता है, और
जावा जेनेरिक्स घिरे वाइल्डकार्ड की अवधारणा का समर्थन लगभग .NET Type
वर्ग
अब तक, बहुत अच्छा है। लेकिन मुझे सामान्य रूप से Class<T>
टाइप किए गए जावा के करीब पर्याप्त समकक्ष नहीं मिल सकता है, जहां टी एक बाध्य वाइल्डकार्ड है। यह मूल रूप से उन प्रकारों पर प्रतिबंध लगाता है जो Class
दर्शाते हैं।
मुझे जावा में एक उदाहरण दें।
String custSortclassName = GetClassName(); //only known at runtime,
// e.g. it can come from a config file
Assembly assy = GetAssembly(); //unimportant
Type customClass = assy.GetType(custSortclassName);
if(!customClass.IsSubclassOf(typeof(IExternalSort))){
throw new InvalidOperationException(...);
}
IExternalSort impl = (IExternalSort)Activator.CreateInstance(customClass);
जावा संस्करण मेरे लिए क्लीनर दिखता है:
String custSortclassName = GetClassName(); //only known at runtime,
// e.g. it can come from a config file
Class<? extends IExternalSort> customClass
= Class.forName("MyExternalSort")
.asSubclass(IExternalSort.class); //this checks for correctness
IExternalSort impl = customClass.newInstance(); //look ma', no casting!
निकटतम मैं नेट में मिल सकता है कुछ इस तरह है। क्या .NET समकक्ष को बेहतर बनाने का कोई तरीका है?
यह थोड़ा आसान हो सकता है, लेकिन जहां प्रतिबंध पर 'नई() 'बाधा को जोड़ना संभव नहीं होगा? कुछ 'MyExternalSort: IExternalSort जहां टी: IExternalSort, नया() 'और फिर' var impl = new t();' का उपयोग करें? व्यक्तिगत रूप से मैं ऐसे परिदृश्यों में एक ही इंटरफ़ेस को लागू करने वाले प्रकारों के उदाहरण बनाने के लिए फैक्ट्री पैटर्न का उपयोग करूंगा। –
Carsten
मुझे जावा जेनरिक के बारे में बहुत कुछ पता नहीं है, लेकिन मुझे पता है कि वे अलग-अलग लागू किए गए हैं (कोई JVM समर्थन नहीं), और कई चीजों का समर्थन करते हैं जो .NET जेनेरिक नहीं करते हैं। तो – jalf
@Aschratt के लिए सीधे "समतुल्य" खोजने की अपेक्षा न करें Ichratt मैं नहीं देखता कि यह मेरे प्रश्न के लिए प्रासंगिक कैसे है। यह चाल उपयोगी हो सकती है अगर सभी प्रकार की जानकारी संकलन समय पर जानी जाती है, लेकिन MyExternalSort टाइपटाइम तक ज्ञात नहीं है - यह मेरी सॉर्टिंग लाइब्रेरी के क्लाइंट द्वारा अच्छी तरह कार्यान्वित किया जा सकता है, और केवल नाम से निर्दिष्ट है। –