2012-04-24 19 views
8

मैं इस कोड मिल गया है <टी somethng फैली>। यह क्यों काम नहीं कर रहा है? U'm JDK7 में निम्न त्रुटि हो रही है:कक्षा का एक उदाहरण लौटने जावा विधि

error: incompatible types 
required: Class<T> 
found: Class<MyScrapper> 
where T is a type-variable: 
T extends Scrapper declared in method <T>getScrapper() 

पी.एस. मैंने ईमानदारी से पूरे 30-40 मिनट के लिए खोज करने की कोशिश की है।

अद्यतन: यदि मैं public Class<? extends Scrapper> getScrapper() { के रूप में विधि घोषित करता हूं तो यह काम करता है। लेकिन मुझे अभी भी समझ में नहीं आता कि मूल घोषणा क्यों संकलित नहीं कर रही थी। इसके साथ गलत क्या है?

+0

क्या होता है यदि आप बस <टी स्क्रैपर को बढ़ाते हैं> ControlAltDel

+0

जिस तरह से आप सुझाव देते हैं कि यह काम नहीं करना चाहिए Io। लेकिन मैंने कुछ और करने की कोशिश की और यह काम किया। मैंने प्रश्न –

+0

हाँ अद्यतन किया मैं थक गया हूँ। मेरा मतलब केवल स्क्रैपर (अपरिवर्तित) में परिवर्तन था, लेकिन आपको क्लास तर्क का उपयोग करके काम करने के लिए मिला और यदि यह – ControlAltDel

उत्तर

10
एक सामान्य विधि की तरह getScrapper() साथ

, फोन करने वाले विधि के निर्धारित करता है क्या विधि के लिए वास्तविक प्रकार तर्क (इस मामले में T) है। कॉलर Scrapper के T के रूप में कोई उपप्रकार चुन सकता है, और आपकी विधि (जो हमेशा MyScrapper.class लौटाती है) सही कक्षा वापस नहीं आती है।

Class<MyOtherScrapper> c = foo.<MyOtherScrapper>getScrapper(); 

Class<? extends Scrapper> वापस जाने के लिए विधि को बदलने से यह अब एक सामान्य विधि है ... देखते हैं:

विधि के हस्ताक्षर को देखते हुए, इस विधि के फोन करने वाले यह करने के लिए सक्षम होने के लिए उम्मीद करेंगे कॉलर सेट करने के लिए कोई प्रकार पैरामीटर नहीं। इसके बजाए, हस्ताक्षर कहता है कि विधि के लिए क्लास ऑब्जेक्ट को Scrapper के कुछ अज्ञात उपप्रकार, और MyScrapper.class के लिए बिल फिट करता है।

+0

पर आपके उद्देश्यों को सही तरीके से फिट करता है तो धन्यवाद :) ऐसा लगता है कि मैं थक गया था और कल गूंगा था जब मैंने यह सवाल पूछा: डी को मिलना चाहिए था मैं खुद :) –

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