2010-01-04 13 views
20

जावा में, क्या मैं एक सामान्य सुपरटेप से विस्तार करने में सक्षम हूं? इस आलेख के अनुसार, ऐसा लगता है कि मुझे यह सक्षम होना चाहिए: http://www.ibm.com/developerworks/java/library/j-djc05133.htmlजेनेरिक सुपरटेप से विस्तारित करें?

public abstract class MyClass<T> extends T { 

हालांकि, जब मैं अपने आवेदन में कुछ इसी तरह करते हैं, मैं निम्नलिखित त्रुटि मिलती है: "एक महाप्रकार के रूप में प्रकार पैरामीटर टी का उल्लेख नहीं कर सकते।"

क्या किसी को पता है कि क्या मैं जावा में एक सामान्य सुपरटेप से विस्तार करने में सक्षम हूं? और, यदि हां, तो ऐसा करने के लिए क्या कुछ विशेष आवश्यकता है?

संपादित करें: मैंने आलेख को गलत पढ़ा है। यह वास्तव में इसकी संभावित समस्याओं पर चर्चा कर रहा है।

+1

क्या आप हमें अपने कोड से घोषणा दिखा सकते हैं ... लगता है जैसे आप गलत वाक्यविन्यास का उपयोग कर रहे हैं। –

उत्तर

9

आप सामान्य प्रकार पैरामीटर वाले सुपरर्ट टाइप से प्राप्त करने में सक्षम हैं। उदाहरण के लिए:

public class MyStringList extends AbstractList<String> 

आप एक वर्ग एक वाइल्डकार्ड महाप्रकार है कि परिभाषित करने में सक्षम नहीं हैं:

public class MyList<T> extends AbstractList<T> 

(या यहां तक ​​कि मानकों सीमा, उदा दें)। ऐसी अवधारणा जावा में कोई समझ नहीं लेती है (और मुझे विश्वास नहीं है कि यह सार में बहुत अधिक मूल्य है)। आपके MonitoredDevice उदाहरण में, मुझे यह भी सुनिश्चित नहीं है कि आप वहां किस कार्यक्षमता की अपेक्षा करते हैं।

मिटाए जाने के कारण जावा काम करने के मौलिक स्तर पर यह संभव नहीं है। प्रत्येक वर्ग में एक सुपरक्लास होना चाहिए - MonitoredDevice का सुपरक्लास क्या है? MonitoredDevice ऑब्जेक्ट पर कौन सी विधियां उपलब्ध हैं? आप इस वर्ग पर किसी भी विरासत विधियों को कॉल करने में सक्षम नहीं होंगे क्योंकि संकलक ऐसी विधियों की गारंटी नहीं दे सका, और न ही बाइटकोड ऐसी कॉल का प्रतिनिधित्व कर सकता है।

मुझे संदेह है कि आप जो करने की कोशिश कर रहे हैं उसे dynamic proxies के साथ बेहतर तरीके से हासिल किया जा सकता है।

संपादित करें: ठीक है, लेख को पूरी तरह पढ़ने के बाद मैं देख सकता हूं कि इस तरह की घोषणा के पीछे प्रेरणा क्या होगी। लेकिन लेख को पूरी तरह पढ़ने के बाद, आप यह भी महसूस करते हैं कि वर्तमान में जावा द्वारा समर्थित नहीं है। मौलिक कारण क्यों मिटाने के कारण है; इस तरह की तकनीक वर्तमान मैकेनिक्स के तहत कभी भी संभव नहीं होगी, और यह लेख बहुत अधिक विस्तार से चला जाता है जो विशेष रूप से इसे काम करने से रोकता है।

+0

यह मुझे समझ में आता है। मैं बस वर्ग के मूल प्रकार को गतिशील रूप से निर्दिष्ट करने में सक्षम होना चाहता हूं; और ऐसा लगता है कि मुझे जेनेरिक का उपयोग करके ऐसा करने में सक्षम होना चाहिए। लेकिन, मैं किसी भी उन्नत जावा प्रोग्रामर से नहीं हूं और जावा भाषा के निम्न-स्तर के विवरणों को नहीं जानता हूं। मैं गतिशील प्रॉक्सी में देखता हूँ। धन्यवाद। संपादित करें: अपने अंतिम संपादन से पहले इस टिप्पणी को लिखें। ;) –

2

उस त्रुटि संदेश से ऐसा लगता है कि आप टाइप पैरामीटर से विस्तार करने की कोशिश कर रहे हैं, जो आप नहीं कर सकते क्योंकि रनटाइम पर टाइप मिटा दिया गया है। यदि ऐसा नहीं है जो आप करने का प्रयास कर रहे हैं, तो कृपया अपना कोड पोस्ट करें।

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