2016-12-02 10 views
5

मैं वर्तमान में हैमानचित्र इंटरफ़ेस

class A {...} 
interface B {...} 

क्या मैं करना चाहते हैं,

HashMap<String, A implements B> 

यानी के कुछ बराबर है कि A के किसी भी मामले के लिए एक String नक्शे को लागू करने वाली B । लेकिन वह वाक्यविन्यास संकलित नहीं करता है। क्या इंटरफ़ेस लागू करने वाली कक्षा में मैप करने का कोई तरीका है? यह भी ध्यान दें कि A साधारण नहीं है, इसलिए मैं की तरह

A<? implements B> 
+0

क्या आपका मतलब 'ए' के किसी भी उप-वर्ग है जो' बी' लागू करता है? –

+0

वह कोड गंध की तरह गंध करता है। क्या आप सुनिश्चित हैं कि आपकी कक्षा पदानुक्रम डिजाइन सही है? – biziclop

+0

@ निकोलसफिलोटो बिल्कुल – Sherz

उत्तर

5

यह एक सामान्य संदर्भ में किया जाना है, उदाहरण के लिए, एक सामान्य विधि में संभव है कुछ नहीं कर सकते:

public <T extends A & B> void method() { 
    Map<String, T> map = new HashMap<>(); 
} 

दुर्भाग्य से , हम इन एकाधिक प्रतिबंधों को वाइल्डकार्ड पर लागू नहीं कर सकते हैं।

+0

यह दिलचस्प लग रहा है, लेकिन मैं इस मानचित्र को उस विधि में घोषित कर रहा हूं जिसमें पहले से ही वापसी मूल्य है, इसलिए मुझे हस्ताक्षर से यह पैरामीटरकरण नहीं मिल रहा है। तकनीकी रूप से मैं इसे कुछ अजीब getHashMap() विधि में दोबारा करने में सक्षम हो सकता हूं, जो केवल हस्ताक्षर के आधार पर पैरामीटरयुक्त मानचित्र लौटाता है, लेकिन यह हैकी लगता है। – Sherz

+0

@ शेरज़, यहां एक रिटर्न प्रकार कोई फर्क नहीं पड़ता, विधि को इस तरह कहा जा सकता है। विधि() 'जहां 'सी' एक' कक्षा 'है एक उपकरण बी बढ़ाता है – Andrew

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