如何使用Java反射获取和调用带有数组参数的方法

时间:2018-02-23 11:53:53

标签: java reflection

我需要使用反射来调用以下两个方法:

buildUniqueKeyFromColumnNames(Table table, String keyName, String[] columnNames)
buildUniqueKeyFromColumnNames(Table table, String keyName, String[] columnNames, String[] orderings, boolean unique)

我尝试了以下内容,但没有任何运气:

Method buildUniqueKeyFromColumnNames1 = clazz.getDeclaredMethod("buildUniqueKeyFromColumnNames",
Table.class, String.class, String[].class);
Method buildUniqueKeyFromColumnNames2 = clazz.getDeclaredMethod("buildUniqueKeyFromColumnNames",
Table.class, JPAIndexHolder.class, UniqueConstraintHolder.class, String[].class, String[].class, Boolean.class);

这只会导致NoSuchMethodException。我怀疑它与数组参数有关。

如何使用反射正确地获取和调用这两种方法?

2 个答案:

答案 0 :(得分:0)

如何使用反射:

http://java.sun.com/docs/books/tutorial/reflect/member/methodInvocation.html

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

其中:

  • “class name”是类的名称
  • objectToInvokeOn属于Object类型,是您要在
  • 上调用方法的对象
  • “方法名称”是您要调用的方法的名称
  • parameterTypes的类型为Class [],并且decalres方法的参数 - params的类型为Object []并声明要传递给方法的参数

答案 1 :(得分:0)

我想在@ Dsenese1的答案中添加一些东西。 如果出现错误,您必须使用try catch块处理错误。 否则你无法建立它

try{
    Class<?> c = Class.forName("class name");
    Method method = c.getDeclaredMethod("method name", parameterTypes);
    method.invoke(objectToInvokeOn, params);
}catch(Exception e){
    //Handle error
}