Java动态函数调用
我有一个String数组,其中包含yyyyyy
类中方法的名称
在xxxxxx
类中,我正在创建一个yyyyyy
实例(比如obj
)。 现在我可以调用obj.function_name()
,除了我想从循环中的String数组中读取function_name
。 这可能吗?
你可以使用reflection 。 它是通过调用Yyyy.class.getMethod("methodName").invoke(someArgs)
来完成的Yyyy.class.getMethod("methodName").invoke(someArgs)
你必须处理一堆例外,你的方法必须public
。 请注意,java编码约定更喜欢methodName
到method_name
。
然而,使用reflection应该是最后的手段。 您应该使用更多面向对象的技术。
如果你经常需要类似的function,也许你可以看看在java平台上运行的一些动态语言,比如groovy
可以使用reflection,但如果您需要这种行为,您可能会对您的设计提出疑问。 Class.getMethod
获取方法名称的String
并返回一个Method
对象,然后可以调用.invoke
on来调用方法
这些Javadoc页面应该是有用的:
-
Class.getMethod
-
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 }