2010-12-30 6 views
9

मेरे पास संसाधन बंडल से लूप में एक वर्ग के तार, फ़ील्ड नामों की एक सूची है। मैं एक ऑब्जेक्ट बनाता हूं और फिर लूप का उपयोग करके मैं उस ऑब्जेक्ट के लिए मान सेट करना चाहता हूं। उदाहरण के लिए, वस्तुप्रतिबिंब का उपयोग कर गतिशील सेटटर और गेटर को परिभाषित करने के लिए कैसे?

Foo f = new Foo(); 

पैरामीटर param1 साथ के लिए, मैं स्ट्रिंग "param1" है और मैं किसी भी तरह की तरह "सेट" + "param1" concate को "सेट" इसके साथ और उसके बाद के रूप में च उदाहरण पर इसे लागू करना चाहते हैं:

f.setparam1("value"); 

और गेटर के लिए समान। मुझे पता है कि प्रतिबिंब मदद करेगा लेकिन मैं इसे करने में सक्षम नहीं था। कृपया मदद करें। धन्यवाद!

+0

यदि आप सब कुछ के लिए सेटर्स और गेटर्स बना रहे हैं, तो ऐसा लगता है कि आपको चीजों को सार्वजनिक बनाने पर विचार करना चाहिए। – EnabrenTane

+0

यदि गुण सार्वजनिक हैं, तो मैं प्रतिबिंब का उपयोग कैसे कर सकता हूं ताकि तार फ़ील्ड के रूप में व्यवहार कर सकें? – wasimbhalli

+1

इसे स्वयं क्यों लागू करें? आप लंबोक (http://projectlombok.org/features) का उपयोग कर सकते हैं। बस अपनी कक्षा में '@ गेटटर' एनोटेशन जोड़ें और यह प्रत्येक फ़ील्ड के लिए गेटटर विधि उत्पन्न करेगा (नोट: यह स्रोत कोड जनरेशन टूल नहीं है)। – rodion

उत्तर

6

आप ऐसा कुछ कर सकते हैं। आप इस कोड अधिक सामान्य बनाने के लिए इतना है कि आप खेतों पर पाशन के लिए उपयोग कर सकते हैं कर सकते हैं:

Class aClass = f.getClass(); 
Class[] paramTypes = new Class[1]; 
paramTypes[0] = String.class; // get the actual param type 

String methodName = "set" + fieldName; // fieldName String 
Method m = null; 
try { 
    m = aClass.getMethod("confirmMsg", paramTypes); 
} catch (NoSuchMethodException nsme) { 
    nsme.printStackTrace(); 
} 

try { 
    String result = (String) m.invoke(f, fieldValue); // field value 
    System.out.println(result); 
} catch (IllegalAccessException iae) { 
    iae.printStackTrace(); 
} catch (InvocationTargetException ite) { 
    ite.printStackTrace(); 
} 
+1

पुष्टिकरण विधि के साथ प्रतिस्थापित करने के लिए संदेश भेजें ... यह काम करता है, बहुत बहुत धन्यवाद :) – wasimbhalli

+0

हाय, कृपया मेरी मदद करें। मुझे और जानकारी चाहिए। – nurealam11

7

Apache Commons BeanUtils यह करता है।

+1

लिंक किए गए संसाधनों के प्रश्न के उत्तर देने के बारे में कुछ जानकारी प्रदान करना सहायक होता है। – freakTheMighty

+0

नमूना के लिए यह लिंक देखें [उदाहरण] (http://www.codesuggestions.com/java/apache-commons-bean-utils-tutorial/) – Uppicharla

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

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