संभव डुप्लिकेट:
C# vs Java genericsप्रकार विलोपन: जावा बनाम सी #
Java
उपयोग प्रकार विलोपन रनटाइम पर जबकि C#
रखें प्रकार की जानकारी, क्या के व्यवहार में व्यावहारिक अंतर कर रहे हैं इस डिजाइन से भाषा?
संभव डुप्लिकेट:
C# vs Java genericsप्रकार विलोपन: जावा बनाम सी #
Java
उपयोग प्रकार विलोपन रनटाइम पर जबकि C#
रखें प्रकार की जानकारी, क्या के व्यवहार में व्यावहारिक अंतर कर रहे हैं इस डिजाइन से भाषा?
यहाँ कुछ का एक उदाहरण है कि संभव है केवल तभी प्रकार की जानकारी क्रम पर रखा जाता है है:
public string DoSomething<T>()
{
return typeof(T).Name;
}
निकटतम आप जावा में मिल सकता है
है की तरह कुछ:
public <T> string DoSomething(Class<T> theClass)
{
return theClass.getName();
}
कुछ ऐसा में क्या होता है टाइप एरर के कारण जावा "ब्रिज विधियों" नामक कृत्रिम तरीकों का निर्माण है।
यह आमतौर पर तब होता है जब जावा एक वर्ग या इंटरफ़ेस को संकलित करने का प्रयास करता है जो पैरामीटरयुक्त वर्ग को बढ़ाता है, या पैरामीटरयुक्त इंटरफ़ेस लागू करता है। इस मामले में जावा कंपाइलर को टाइप-एरर प्रक्रिया के हिस्से के रूप में सिंथेटिक विधि (पुल विधि) बनाने की आवश्यकता हो सकती है, जो स्टैक ट्रेस में दिखाई देता है।
कंपाइलर टाइप एरर प्रक्रिया के बाद जेनेरिक प्रकारों के बहुरूपता को संरक्षित करने के लिए करता है।
जावा के दस्तावेज़ में an example है।
टाइप एरर के साथ बहुत सारे मुद्दे हैं। यह बुरी यादें वापस लाता है। मैं 1.6 के बाद से जावा का इस्तेमाल किया है नहीं है, तो यह पुराना हो सकता है, लेकिन कुछ बातें मुझे याद है:
class c implements IComparable<MyClass>, IComparable<MyOtherClass>
असंभव है।
List<T1>
, List<T2>
, और इसी तरह से ले कर। उदाहरण के लिए, Java -- How to deal with type erasure in constructors?
देखो [यहां] द्वारा किया जाता है (http://stackoverflow.com/questions/355060/c-sharp-vs-java-generics) –