当给定方法名称为字符串时,如何调用Java方法?
2022-08-31 04:07:09
如果我有两个变量:
Object obj;
String methodName = "getName";
在不知道 的类的情况下,我该如何调用 由 它 识别的方法?obj
methodName
被调用的方法没有参数,只有一个返回值。这是Java豆的获取器。String
如果我有两个变量:
Object obj;
String methodName = "getName";
在不知道 的类的情况下,我该如何调用 由 它 识别的方法?obj
methodName
被调用的方法没有参数,只有一个返回值。这是Java豆的获取器。String
从臀部编码,它将是这样的:
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
使用从反射调用的方法:
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[]