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编码约定更喜欢methodNamemethod_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 }