2010-06-16 20 views
21

बुला समारोह मैं एक स्ट्रिंग सरणी yyyyyy वर्गजावा गतिशील

में विधि के नाम शामिल हैं कि xxxxxx वर्ग में मैं एक yyyyyy उदाहरण (obj कहते हैं) बना रही हूँ है। अब मैं obj.function_name() पर कॉल कर सकता हूं, सिवाय इसके कि मैं एक लूप में स्ट्रिंग सरणी से function_name पढ़ना चाहता हूं। क्या यह संभव है?

+1

आप विस्तार से बता सकते हैं की तरह लग रहे कर सकते हैं? समझने के लिए यह इतना स्पष्ट नहीं है। –

+3

मुझे विश्वास है कि आप जिस शब्द को खोज रहे हैं वह "प्रतिबिंब" है। – Stephen

+0

और मुझे यह भी यकीन है कि उसका मतलब क्या है: http://stackoverflow.com/questions/160970/how-do-i-invoke-a-java-method-when-given-the-method-name -एएस-ए-स्ट्रिंग – gumuruh

उत्तर

32

आप reflection का उपयोग कर सकते हैं। यह Yyyy.class.getMethod("methodName").invoke(someArgs)

पर कॉल करके किया जाता है आपको अपवादों का एक समूह संभालना होगा, और आपकी विधि public होनी चाहिए। ध्यान दें कि जावा कोडिंग सम्मेलन methodName से method_name पसंद करते हैं।

प्रतिबिंब का उपयोग करना, अंतिम उपाय होना चाहिए। आपको अधिक ऑब्जेक्ट उन्मुख तकनीकों का उपयोग करना चाहिए।

आप लगातार ऐसी ही सुविधाओं की जरूरत है, शायद आप जावा प्लेटफॉर्म पर चलने कुछ गतिशील भाषा में, groovy

22

प्रतिबिंब का उपयोग करना संभव है, हालांकि आपको उस तरह के व्यवहार की आवश्यकता होने पर शायद कुछ हद तक अपने डिजाइन पर सवाल करना चाहिए। Class.getMethod विधि नाम के लिए एक String लेता है और एक Method वस्तु है, जो आप तो पर .invoke कॉल कर सकते हैं उपयोगी होना चाहिए विधि

ये जावाडोक पृष्ठों कॉल करने के लिए देता है:

नमूना कोड (yyyyyy विधियों को मानते हुए int तर्क लेते हैं, केवल तर्क दिखाने के लिए एसएसआईएन):

yyyyyy obj = new yyyyyy(); 
String[] methodNames = {"foo", "bar", "baz"}; 
for(String methodName : methodNames) { 
    Method method = Class.forName("yyyyyy").getMethod(methodName, new Class[] {int.class}); 
    method.invoke(obj, 4); // 4 is the argument to pass to the method 
} 
+1

आप 'class.forName के अंत में' obj.getClass() 'का उपयोग क्यों नहीं करते ("yyyyyy") '? – Marc

+0

लिंक गड़बड़ हो गए हैं,% 29 –

+1

@Marc मैं वास्तव में 'yyyyyy.class' को प्राथमिकता देता हूं, लेकिन किसी भी काम –

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