2011-11-29 12 views
8

बनाने के लिए जावा प्रतिबिंब मुझे एक इकाई में निहित फ़ील्ड/मानों का हैशमैप बनाना होगा, इसलिए मैं उन्हें फ़ील्ड नामों वाले टैग वाले स्ट्रिंग में बदलने के लिए उनका उपयोग कर सकता हूं।क्षेत्र/मूल्य हैशप

मैं इस कोड है:

public static String replaceTags(String message, Map<String, String> tags) ... 

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

public static Map<String, String> getMapFromEntity(Object entity){ 
    Map<String, String> map = new HashMap<String, String>(); 

    ...????? 

    return map; 
} 

मैं मैं प्रतिबिंब इस्तेमाल कर सकते हैं पता है और यह केवल दृष्टिकोण मैं इस किया जाना पाया है है, लेकिन वहां किसी अन्य तरीके से एक ही पूरा करने के लिए है ?, मैं एक अधिक कुशल तरीका मतलब है।

धन्यवाद।

+0

यदि आपको नहीं पता कि इनपुट स्ट्रिंग में कौन से टैग मौजूद हो सकते हैं, तो प्रतिबिंब AFAIK का एकमात्र तरीका होगा। – aishwarya

+0

हां @ ऐश्वर्या, इकाई में किसी भी प्रकार का डेटा हो सकता है, इसलिए प्रतिबिंब एकमात्र तरीका है, धन्यवाद। –

+0

http://stackoverflow.com/questions/6796187/java-introspection-object-to-map – Vadzim

उत्तर

9
Field[] fields = entity.getClass().getFields(); 
    Map<String, String> map = new HashMap<String, String>(); 
    for(Field f : fields) 
      map.put(f.getName(),(String) f.get(entity)); 

ओ, और आपकी इकाई आपकी कक्षा का एक वस्तु होनी चाहिए, न कि आपकी कक्षा स्वयं। अपने खेतों निजी हैं और आप उनके लिए ही टिककर खेल है, तो आप getMethods() की जाँच का उपयोग करें और चाहिए अगर प्रणाली नाम "प्राप्त" prefix.Like इस के साथ शुरू होता:

Method[] methods = entity.getClass().getMethods(); 
    Map<String, String> map = new HashMap<String, String>(); 
    for(Method m : methods) 
    { 
     if(m.getName().startsWith("get")) 
     { 
      String value = (String) m.invoke(entity); 
      map.put(m.getName().substring(3), value); 
     } 
    } 
+0

हैलो एडमिबान, कोड के लिए धन्यवाद, बहुत अच्छी तरह से काम करता है !, यहां तक ​​कि सोचा कि मुझे कुछ मूल्य वापस लौटना पड़ा तरीकों से क्योंकि उनमें से सभी स्ट्रिंग्स नहीं हैं, लेकिन आपके पास मुख्य कोड होने के बाद यह आसान है। –

+4

बूलियन के लिए गेटर्स "है" ;-) से शुरू हो सकते हैं। सत्य के लिए सुलभ सेट करने के बाद सीधे फ़ील्ड से मूल्य प्राप्त करना आसान होता है लेकिन आप विधियां भी कर सकते हैं। – aishwarya

0

मैं मैं प्रतिबिंब इस्तेमाल कर सकते हैं पता है और यह एकमात्र दृष्टिकोण है जो मेरे पास है, यह करने के लिए पाया गया है, लेकिन क्या को पूरा करने का कोई अन्य तरीका है?

जहाँ तक मुझे पता है, प्रतिबिंब एक ही तरीका है यह पूरा करने के लिए, जब तक वर्ग (ते) आप कुछ इंटरफ़ेस को लागू से नक्शा निर्माण करना चाहते है, और अपने कोड नक्शा निकालने इस इंटरफेस के बारे में पता है।

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