2013-02-15 13 views
5

पैरामीटर के साथ एक विधि कैसे घोषित करें जो एक निश्चित कक्षा होनी चाहिए जो इसके लिए एक विशेष कक्षा घोषित किए बिना कुछ इंटरफ़ेस लागू करे?
मान लें कि मैंने कक्षा ImageX घोषित किया है और इंटरफ़ेस टैगिंग घोषित किया है। तो मुझे कुछ अन्य वर्ग या विधि बनाने की ज़रूरत है, जिसे केवल छवि एक्सएक्सएक्स के उदाहरण मिलते हैं जो टैगिंग इंटरफ़ेस लागू करते हैं। ऐसी विधि कैसे घोषित करें? कुछविधि पैरामीटर कुछ कक्षा का obj होना चाहिए जो कुछ इंटरफेस लागू करता है

private void someMethod (ImageX<Tagging> obj){} 

लेकिन यह बिल्कुल सही नहीं है। हां, अगर मैं आवश्यक इंटरफ़ेस लागू करता हूं तो मैं ओबीजे की जांच कर सकता हूं लेकिन मैं पैरामीटर में जांच करना चाहता हूं। और क्या होगा यदि यह कुछ विधि नहीं है लेकिन एक निर्माता ...
क्या मैं जेनरिक के बारे में पूछ रहा हूं?

+1

तो तुम एक 'Tagging' इंटरफ़ेस करना चाहते हैं, और अलग से एक' ImageX 'वर्ग जो * टैगिंग 'को लागू नहीं करता है, और फिर आप एक ऐसी विधि चाहते हैं जो' ImageX' के उदाहरण स्वीकार करे, लेकिन केवल तभी जब वे * टैगिंग को लागू करें *? मैं सुझाव दूंगा कि ऐसा करना चाहते हैं जो रिफैक्टर की आवश्यकता को इंगित करता है। –

+0

हां, मुझे यह चाहिए। यह एंड्रॉइड के बारे में है और कक्षा गतिविधि है जो कुछ आवश्यक इंटरफ़ेस लागू करती है। लेकिन हर गतिविधि यह नहीं करती है और मैं इसके लिए गतिविधि को उपclass नहीं करना चाहता था। – Stan

+0

@ स्टैन: मुझे यह मिल गया। सौभाग्य से, assylias का जवाब था (और काफी अच्छा भी)। –

उत्तर

10

आप विधि सामान्य बना सकते हैं और केवल वस्तुओं है कि एक प्रकार चौराहे का उपयोग करके दोनों एक ImageX और एक टैगिंग कर रहे हैं स्वीकार करते हैं:

private <T extends ImageX & Tagging> void someMethod (T obj){} 
+0

+1 Niiiiice। मैं इसे टालना चाहता हूं, लेकिन इसे अच्छा लगा। (जेनेरिक विधियां सिर्फ फ्लिपिन 'कूल हैं।) अगर कोई इसे क्रिया में देखना चाहता है: http://pastie.org/6179036 –

+0

@ टी.जे.क्रॉडर यह सवाल का जवाब देता है लेकिन जैसा कि आपने बताया है, यह सबसे अच्छा तरीका नहीं है! – assylias

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