Java动态函数调用

dpa*_*ksp 24 java reflection

我有一个String数组,其中包含yyyyyy类中方法的名称

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

Boz*_*zho 37

你可以使用反射.这是通过电话完成的Yyyy.class.getMethod("methodName").invoke(someArgs)

你必须处理一堆例外,你的方法必须是public.需要注意的是Java编码惯例喜欢methodNamemethod_name.

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

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


Mic*_*zek 24

可以使用反射,但如果你需要这种行为,你应该对你的设计提出一些质疑.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
}
Run Code Online (Sandbox Code Playgroud)