Java动态函数调用

时间:2010-06-16 05:44:25

标签: java reflection

我有一个String数组,其中包含yyyyyy

中方法的名称

xxxxxx课程中,我正在制作yyyyyy个实例(比如说obj)。现在我可以调用obj.function_name(),除了我想在循环中从String数组中读取function_name。这可能吗?

2 个答案:

答案 0 :(得分:35)

您可以使用reflection。这是通过调用Yyyy.class.getMethod("methodName").invoke(someArgs)

来完成的

您必须处理一系列异常,并且您的方法必须为public。请注意,java编码约定更喜欢methodNamemethod_name

然而,使用反射应该是最后的手段。您应该使用更多面向对象的技术。

如果你经常需要类似的功能,也许你可以看一下在java平台上运行的一些动态语言,比如groovy

答案 1 :(得分:23)

可以使用反射,但如果你需要那种行为,你可能会对你的设计提出一些质疑。 Class.getMethod获取方法名称String并返回Method对象,然后您可以调用.invoke来调用方法

这些Javadoc页面应该会有所帮助:

示例代码(假设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
}