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

2022-08-31 04:07:09

如果我有两个变量:

Object obj;
String methodName = "getName";

在不知道 的类的情况下,我该如何调用 由 它 识别的方法?objmethodName

被调用的方法没有参数,只有一个返回值。这是Java豆的获取器String


答案 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) { ... }

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


答案 2

使用从反射调用的方法

Class<?> c = Class.forName("class name");
Method method = c.getDeclaredMethod("method name", parameterTypes);
method.invoke(objectToInvokeOn, params);

哪里:

  • "class name"是类的名称
  • objectToInvokeOn是 Object 类型,并且是要在其上调用方法的对象
  • "method name"是要调用的方法的名称
  • parameterTypes是类型,并声明方法采用的参数Class[]
  • params是类型,并声明要传递给方法的参数Object[]