Java 动态函数调用

2022-09-01 15:11:48

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

在类中,我正在制作一个实例(例如)。现在我可以调用 ,除了我想从循环中的 String 数组读取。这可能吗?xxxxxxyyyyyyobjobj.function_name()function_name


答案 1

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

您必须处理一堆异常,并且您的方法必须是 .请注意,Java 编码约定更喜欢 。publicmethodNamemethod_name

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

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


答案 2

可以使用反射,尽管如果您需要这种行为,则可能应该质疑您的设计。 将 a 作为方法名称并返回一个对象,然后可以调用该对象来调用该方法Class.getMethodStringMethod.invoke

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

示例代码(假设这些方法采用一个参数,只是为了显示参数传递):yyyyyyint

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
}