2013-06-18 7 views
7

मैं एक कक्षा बनाने की कोशिश कर रहा हूं जो Queue और Map लागू करता है। दोनों इंटरफेस है, लेकिन विभिन्न प्रकार के साथ वापसी remove(Object) विधि को परिभाषित: कश्मीर कीअसंगत इंटरफेस लागू करना

public interface Collection<E> { //Queue extends Collection, which has the problem method 

    public boolean remove(Object e); 

    //... 
} 

public interface Map<K,V> { 

    public V remove(K key); 

    //... 
} 

public class QueuedMap<K,V> extends AbstractMap implements Queue { 

    public V remove(K key) {/* ... */} 
    //ERROR: V is not compatible with boolean 

    //... 
} 

प्रकार विलोपन इन दो विधि हस्ताक्षर टकराने खड़ी कर रहा है। मेरे पास उनमें से एक नहीं हो सकता क्योंकि यह एक अमान्य ओवरराइड है, और मेरे पास दोनों नहीं हो सकते क्योंकि उनके पास एक ही हस्ताक्षर है। क्या कोई तरीका है कि मैं इन दो इंटरफेस को सह-अस्तित्व में बना सकता हूं?

+0

कफ से बाहर, यह मेरे लिए संभव नहीं लगता है। –

+0

अगर आप निकालें (कुंजी) कहलाते हैं तो आपकी कक्षा का निर्धारण किस प्रकार किया जाएगा? –

+0

[अच्छा दिखता नहीं है] (http://stackoverflow.com/questions/573621/is-the-c-sharp-explicit-implementation-of-the-interface-present-in-java) –

उत्तर

4

मुझे विश्वास नहीं है कि इस विशेष मामले में यह संभव है। यदि दोनों कक्षाएं ऑब्जेक्ट प्रकार लौटाती हैं तो आपको कुछ मौका मिलेगा, लेकिन चूंकि आप बुनियादी और ऑब्जेक्ट प्रकारों को मिश्रित कर रहे हैं, इसलिए कोई संगत प्रकार नहीं है जो इंटरफेस दोनों का समर्थन करेगा।

अनुकूल इंटरफेस को लागू करने के लिए एक अलग दृष्टिकोण हो सकता है, फिर आवश्यकतानुसार एक आंतरिक संरचना और मानचित्र फ़ंक्शन कॉल को स्टोर करने के लिए संरचना का उपयोग करें। यह मान लेगा कि आपको दोनों इंटरफ़ेस के रूप में संतुष्ट या उपयोग करने की आवश्यकता नहीं है, बल्कि विशेष रूप से वह व्यक्ति जिसे आप बेनकाब करने की आवश्यकता है।

हालांकि, यदि आपको इस वर्ग को दो असंगत इंटरफेस के रूप में बदलने योग्य बनाने की आवश्यकता है, तो यह नहीं किया जा सकता है।

0

आप अपने स्वयं के इंटरफ़ेस MyQueue को उन सभी विधियों के साथ बना सकते हैं जिनके बारे में क्यूई को निकालने का तरीका कम है और इसका उपयोग करें। आप MyQueue इंटरफ़ेस Queue toQueue() विधि दे सकते हैं जो ऑब्जेक्ट को कतार में परिवर्तित कर देता है।

इस रूपांतरण प्रक्रिया में केवल एक अज्ञात Queue का एक नया उदाहरण लौटाना शामिल हो सकता है, जो प्रत्येक विधि एक्स के लिए, बस this. [X] को कॉल/वापस कर देगा। निकालने के तरीके के लिए आप this.remove() पर कॉल करेंगे लेकिन फिर this.remove() कॉल के वापसी मूल्य की बजाय एक बूलियन लौटाएं।

+0

यह असंभव है उपयोगी होना। 'Java.util.Queue' को लागू करने का उद्देश्य यह है कि इस वर्ग के उदाहरणों को उन तरीकों से पारित किया जा सकता है जो 'java.lang.Queue' की अपेक्षा करते हैं। 'MyQueue' को कार्यान्वित करने के लिए यह प्राप्त नहीं होगा। –

+0

@AndrzejDoyle मैं सहमत हूं, लेकिन इस मौके पर ओपी के उपयोग के मामले के लिए यह समाधान काम करेगा या आगे की चर्चा को चकित करेगा मुझे लगा कि मैं इसे पोस्ट करूंगा –

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