java - 将方法名称作为字符串给出时,如何调用 Java 方法?

标签 java reflection invoke

如果我有两个变量:

Object obj;
String methodName = "getName";

在不知道obj的类的情况下,如何调用上面methodName标识的方法?

被调用的方法没有参数,有一个String返回值。它是 Java bean 的 setter/getter

最佳答案

从头开始编码,类似于:

java.lang.reflect.Method method;
try {
  method = obj.getClass().getMethod(methodName, param1.class, param2.class, ..);
} catch (SecurityException e) { ... }
  catch (NoSuchMethodException e) { ... }

参数标识你需要的非常具体的方法(如果有几个重载可用,如果方法没有参数,只给出methodName)。

然后你通过调用来调用该方法

try {
  method.invoke(obj, arg1, arg2,...);
} catch (IllegalArgumentException e) { ... }
  catch (IllegalAccessException e) { ... }
  catch (InvocationTargetException e) { ... }

同样,如果您没有任何参数,请忽略 .invoke 中的参数。但是,是的。阅读 Java Reflection

关于java - 将方法名称作为字符串给出时,如何调用 Java 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/160970/

相关文章:

Java查找与某个字符等价的上标字符

java - 无法安装 Eclipse UIMA 插件

java - Propagation.REQUIRES_NEW 导致 LockWaitTimeOutException

c# - .NET中如何使用反射判断和检查程序集中的类型是Custom类型还是Primitive类型?

.net - 为什么 WPF Dispatcher.Invoke 不传播异常?

java - 将 HTML 存储到 MySQL 数据库中

java - 以编程方式获取 WebView 实现

c# - 确定两个方法是否具有相同的基本定义

c++ - 如何在 C++ 中通过函数名 (std::string) 调用函数?

c++ - 尝试创建线程的问题