2012-10-20 31 views
5

संभव डुप्लिकेट:
C# vs Java genericsप्रकार विलोपन: जावा बनाम सी #

Java उपयोग प्रकार विलोपन रनटाइम पर जबकि C# रखें प्रकार की जानकारी, क्या के व्यवहार में व्यावहारिक अंतर कर रहे हैं इस डिजाइन से भाषा?

+1

देखो [यहां] द्वारा किया जाता है (http://stackoverflow.com/questions/355060/c-sharp-vs-java-generics) –

उत्तर

2

यहाँ कुछ का एक उदाहरण है कि संभव है केवल तभी प्रकार की जानकारी क्रम पर रखा जाता है है:

public string DoSomething<T>() 
{ 
    return typeof(T).Name; 
} 
निकटतम आप जावा में मिल सकता है

है की तरह कुछ:

public <T> string DoSomething(Class<T> theClass) 
{ 
    return theClass.getName(); 
} 
1

कुछ ऐसा में क्या होता है टाइप एरर के कारण जावा "ब्रिज विधियों" नामक कृत्रिम तरीकों का निर्माण है।

यह आमतौर पर तब होता है जब जावा एक वर्ग या इंटरफ़ेस को संकलित करने का प्रयास करता है जो पैरामीटरयुक्त वर्ग को बढ़ाता है, या पैरामीटरयुक्त इंटरफ़ेस लागू करता है। इस मामले में जावा कंपाइलर को टाइप-एरर प्रक्रिया के हिस्से के रूप में सिंथेटिक विधि (पुल विधि) बनाने की आवश्यकता हो सकती है, जो स्टैक ट्रेस में दिखाई देता है।

कंपाइलर टाइप एरर प्रक्रिया के बाद जेनेरिक प्रकारों के बहुरूपता को संरक्षित करने के लिए करता है।

जावा के दस्तावेज़ में an example है।

4

टाइप एरर के साथ बहुत सारे मुद्दे हैं। यह बुरी यादें वापस लाता है। मैं 1.6 के बाद से जावा का इस्तेमाल किया है नहीं है, तो यह पुराना हो सकता है, लेकिन कुछ बातें मुझे याद है:

  1. आप एक नया टी नहीं बना सकते हैं (या कुछ भी जानने की आवश्यकता है कि टी वास्तव में है कि किस प्रकार करते हैं)
  2. जेनेरिक सूचियों टी की एक सरणी नहीं बना सकते
  3. आप जावा
    1. साथ जेनरिक में पूर्णांक, नाव, आदि का उपयोग नहीं कर सकते हैं यह प्रदर्शन और स्मृति प्रभाव पड़ता है क्योंकि आप हमेशा ढेर संस्करणों का उपयोग करने के लिए है (इंटीजर, आदि)
  4. आप दो अलग-अलग टीएस के साथ एक सामान्य इंटरफ़ेस को लागू नहीं कर सकते हैं, उदा। class c implements IComparable<MyClass>, IComparable<MyOtherClass> असंभव है।
    1. अधिक व्यावहारिक रूप से, आप अलग-अलग सामान्य प्रकारों के साथ विधियों को अधिभारित नहीं कर सकते हैं, उदा। List<T1>, List<T2>, और इसी तरह से ले कर। उदाहरण के लिए, Java -- How to deal with type erasure in constructors?
  5. सब कुछ कास्टिंग और मुक्केबाजी