2010-12-13 16 views
6

मुझे एक मानचित्र की आवश्यकता है जहां मान विभिन्न प्रकार के होते हैं, जैसे पूर्णांक, स्ट्रिंग इत्यादि। जावा के साथ समस्या यह है कि प्राइमेटिव्स Object एस नहीं हैं जो बताते हैं कि हाइब्रिड शब्दकोश होना संभव नहीं है। मैं इसकी पुष्टि करना चाहता हूं।क्या कोई शब्दकोश है जो विभिन्न डेटा प्रकारों के मान स्वीकार करता है?

+0

यह भी देखें http://stackoverflow.com/questions/2001755/using-int-as-a-type-parameter-for-java-util-dictionary – Fortega

+1

आप टिप्पणियों के लिए अपने अधिक डिज़ाइन को साझा करना चाहेंगे। मानचित्र में विभिन्न प्रकार के मूल्यों का उपयोग करके मेरे अनुभव में अक्सर इष्टतम डिज़ाइन से कम का संकेत होता है। –

+0

मैं एक JSON desrializer चाहता हूं जो एक पेड़ बना सकता है, केवल एक दिए गए लक्ष्य वर्ग में परिवर्तित करने के बजाय संदेश पर आधारित है। इसलिए मुझे एक शब्द <स्ट्रिंग, ऑब्जेक्ट> (शब्दकोश या नक्शा जो कुछ भी हो सकता है) या एक सूची जैसा कि जॉन स्कीट जैसे आउटपुट जावा में स्वचालित मुक्केबाजी मानते हैं। यह भी मानते हुए कि एक अच्छा JSON serialization-deserialzation लाइब्रेरी है जो यह करता है। उदाहरण के लिए जीसन को एक प्रकार की आवश्यकता है जिसमें संदेश को deserialized किया जाएगा। इसलिए जीसन मेरे लिए सहायक नहीं है। आशा है कि आप मेरी समस्या को समझें। – ada

उत्तर

1

आप ऑटोबॉक्सिंग का फायदा उठा सकते हैं और int के बजाय Integer का उपयोग कर सकते हैं।

इसी प्रकार (Integer, Double, Bool, ...), वस्तु के वारिस ताकि आप एक मानक Map<Object, Whatever> उपयोग करें और यह पर मनमाने ढंग से सामान फेंक सकता है।

8

ऐसा लगता है कि आप बस Map<String, Object> (या जो भी आपका मुख्य प्रकार है) चाहते हैं।

आदिम मूल्यों उचित रूप से बॉक्सिंग की जाएगी:

Map<String, Object> map = new HashMap<String, Object>(); 

map.put("int", 20); 
map.put("long", 100L); 
// etc 

ध्यान दें कि आदेश मूल्य और Unbox को पुनः प्राप्त करने में यह आप विशिष्ट आवरण प्रकार उल्लेख करना होगा:

// Explicit unboxing 
int x = (int) (Integer) map.get("int"); 
// Implicit unboxing 
int y = (Integer) map.get("int"); 
// USing a method from Number instead 
int z = ((Integer) map.get("int")).intValue(); 
+0

गीज़ जॉन, आप वास्तव में सो नहीं है। मैं एक ही चीज़ पोस्ट करने वाला था। :) –

+0

संख्याओं के लिए एक और विकल्प मानचित्र <स्ट्रिंग, संख्या> –

+2

@ पीटर लॉरी है, ओपी स्ट्रिंग के प्रकार का मूल्य भी चाहता है। संख्या योग्य नहीं है। –

0

आप कर सकते हैं int के बजाय Integer का उपयोग करें।

3

जब आप जावा में प्राइमेटिव को Map में डालते हैं, तो उन्हें ऑटो-बॉक्सेड उनके ऑब्जेक्ट फॉर्म में मिलता है। उदाहरण के लिए, एक Map परिभाषित करता है, तो आप के रूप में है:

Map<Integer, String> myMap = new HashMap<Integer, String>(); 

तो आप प्रकार int की पुरातन उपयोग कर सकते हैं, जैसा कि वे स्वत: बॉक्सिंग एक Integer में हो जाएगा।

अपने मूल प्रश्न का सवाल है, को परिभाषित करने के लिए एक तरह के रूप में Map:

// using Integer for key type, can be something else 
Map<Integer, Object> myMap = new HashMap<Integer, Object>(); 

तो आप नक्शे में किसी भी जावा वस्तु डाल करने के लिए सक्षम होना चाहिए।

+1

मानचित्र ** ** एक इंटरफेस है, तो' नया नक्शा <पूर्णांक, वस्तु>() है। –

+0

@ द एलिट जेंटलमैन - क्षमा करें, टाइपो –

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

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