我有一个String数组,其中包含yyyyyy
类
在xxxxxx
课程中,我正在制作yyyyyy
个实例(比如说obj
)。现在我可以调用obj.function_name()
,除了我想在循环中从String数组中读取function_name
。这可能吗?
答案 0 :(得分:35)
您可以使用reflection。这是通过调用Yyyy.class.getMethod("methodName").invoke(someArgs)
您必须处理一系列异常,并且您的方法必须为public
。请注意,java编码约定更喜欢methodName
到method_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
}