2013-07-11 8 views
5

हम .NET में इस के साथ प्राप्त कर सकते हैं:जावा पैरामीटर के आधार पर जावा ओवरलोड को क्यों अनुमति नहीं देता है?

interface I<A> {} 
interface I<A, B> {} 

... लेकिन जावा में, एक ही कोड एक संकलन त्रुटि का परिणाम देगा।

यह दिलचस्प है, भले ही टाइप की जानकारी रनटाइम पर चली गई हो, फिर भी कोई भी प्रकार पैरामीटर की संख्या के बारे में जानकारी की अपेक्षा करेगा।

यदि यह सीमा टाइप एरर से संबंधित है, तो क्या कोई बता सकता है कि क्यों?

+0

सीमा यह है कि आप एक से अधिक इंटरफ़ेस को एक से अधिक परिभाषित नहीं कर सकते हैं और आप इसे इस तरह अधिभारित नहीं कर सकते हैं। रनटाइम पर, टाइप-एरर यह सुनिश्चित करेगा कि 'I' वास्तव में वही प्रकार है जिसकी अनुमति नहीं है, या तकनीकी रूप से यह वही नहीं करेगा जो आप चाहते हैं। –

उत्तर

6

यह विलोपन तो अस्पष्टता कि raw type का उपयोग करने से पैदा होता करने के लिए के रूप में ज्यादा टाइप करने के लिए संबंधित नहीं है:

I eye = null; // which 'I' is it? 

कच्चे प्रकार के आदेश से पहले जेनरिक JDK 5.0 में पेश किए गए कोड लिखा समायोजित करने के लिए अनुमति दी जाती है।

+0

इसलिए समस्या प्रति प्रकार टाइप नहीं है, केवल तथ्य यह है कि जावा कच्चे प्रकार के उपयोग की अनुमति देता है जो मूल रूप से टाइप तर्क (ओं) के रूप में ऑब्जेक्ट को गुजरने के लिए मायने रखता है? –

+0

.NET इस समस्या को हल कैसे करता है? कच्चे प्रकार की अनुमति नहीं है? – Thilo

+0

@JSmith Yes वास्तव में – arshajii

1

जावा में, एक सामान्य वर्ग/इंटरफ़ेस में सामान्य पैरामीटर की निश्चित संख्या होती है। यह भाषा को परिभाषित करने का तरीका है।

आप क्या बात कर रहे हैं हो सकता है के बारे में करने के लिए निकटतम बात:

interface I<A> {} 
interface J<A, B> extends I<A> {} 

J का एक उदाहरण अभी भी प्रकार I के एक चर करने के लिए आबंटित है।

संबंधित मुद्दे

 संबंधित मुद्दे