2009-11-18 12 views
5

वास्तव में एक अमूर्त अनुप्रयोग के लिए मैं बना रहा हूं, मुझे अपने पैरामीटर प्रकारों को जानने के बिना और केवल स्ट्रिंग आकार में पैरामीटर को जानने के बिना विधियों को कॉल करने की आवश्यकता है।getClass()। GetMethod ("name", अज्ञात)

मान लें कि मेरे पास विधि है;

getNames(String like, int amount); 

और मेरे पास 2 पैरामीटर वाले तारों की एक सरणी है, तो मान लें कि मेरे पास है;

String[] params = new String[] {"jack", "25"}; 

क्या कोई तरीका है कि मैं इस विधि को पैराम्स सरणी का उपयोग करके प्राप्त कर सकता हूं?

उत्तर

2

आप


String[] params = new String[] {"jack", "25"}; 
Object[] realParams = new Object[params.length]; 
Method[] methods = getClass().getMethods(); 
for (Method method : methods) { 
    if (method.getParameterTypes().length == params.length) { 
    for (int i = 0; i < method.getParameterTypes().length; i ++) { 
     Class<?> paramClass = method.getParameterTypes()[i]; 
     if (paramClass = String.class) { 
      realParams.add(param); 
     } else if (paramClass == Integer.class || paramClass == Integer.TYPE) { 
      realParams.add(Integer.parseInt(param)); 
     } else if (other primitive wrappers) { 
      ... 
     } else { 
      realParams.add(null); // can't create a random object based on just string 
      // you can have some object factory here, or use ObjectInputStream 
     } 
    } 
    break; // you can continue here if the parameters weren't converted successfully,  
    //to attempt another method with the same arguments count. 
    } 
} 
+0

विधि जानने के दौरान मैं स्ट्रिंग को आवश्यक पैरामीटर पर कैसे डाल सकता हूं, क्या आप एक उदाहरण दे सकते हैं? – Thys

+0

उस समाधान के साथ आप तर्कों की एक ही संख्या के साथ दो विधियों नहीं हो सकते हैं। इसे तब तक करना असंभव है जब तक कि आपको या तो निष्पादित करने के तरीकों का नाम या पैरामीटर के प्रकार जिन्हें आप उपयोग करना चाहते हैं। –

+0

मेरे अपडेट की जांच करें – Bozho

1

मेटाप्रोग्रामिंग की तरह लगता है। यदि आप JVM प्लेटफ़ॉर्म पर सेट हैं तो आप ग्रोवी/स्कैला में देखना चाह सकते हैं।

0

जावा प्रतिबिंब एपीआई में देखें, उन्हें (हालांकि मुझे निश्चित रूप से याद नहीं है) आपको विभिन्न प्रकार के पैरामीटर का पता लगाने के लिए आवश्यक जानकारी देने में सक्षम होना चाहिए। इसके बाद आपको सूची में पुन: प्रयास करना होगा और प्रतिबिंबित एपीआई ने आपको विधि के बारे में क्या बताया है, इस आधार पर बुद्धिमानी से प्रत्येक को कास्ट करना होगा।

0

गतिशील प्रोग्रामिंग के लिए एक गतिशील प्रोग्रामिंग भाषा का उपयोग की कोशिश कर सकते। जावा उस तरह के सामान के लिए उपयुक्त नहीं है।

वैसे भी प्रतिबिंब एपीआई पर एक नज़र डालें, लेकिन यदि आप अपने आवेदन के लिए बहुत सारे प्रोग्रामिंग करने की योजना बना रहे हैं तो अन्य विकल्पों पर विचार करें।

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