一尘不染

当给定方法名称为字符串时,如何调用Java方法?

java 反射

如果我有两个变量:

Object obj;
String methodName = "getName";

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

被调用的方法没有参数,并且有String返回值。


阅读 778

收藏
2020-01-10

共1个答案

一尘不染

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如果没有,请忽略中的参数。

2020-01-10