在我的invoke方法上获取JavaExecutionException



我正试图通过反射来调用一个方法。我试图获得的方法的签名如下:

public static JPAQuery find(String query, Object... params) {...}

我使用以下片段来获得声明的方法:

Method findEntities = clazz.getDeclaredMethod("find", params);

我试图用以下片段调用:

Object[] args = new Object[2];
args[0] = fieldName + " = ?"; // Of type String
args[1] = entity; // Of a type extending GenericModel
JPAQuery query = (JPAQuery)findEntities.invoke(null, args); <-- EXCEPTION HERE!!!

但得到以下例外:

play.exceptions.JavaExecutionException: argument type mismatch
....
Caused by: java.lang.IllegalArgumentException: argument type mismatch

play.exceptions.JavaExecutionException: wrong number of arguments
...
Caused by: java.lang.IllegalArgumentException: wrong number of arguments

有人能帮忙吗?

进一步观察

当我换线时:

JPAQuery query = (JPAQuery)findEntities.invoke(null, args);

JPAQuery query = (JPAQuery)findEntities.invoke(null, fieldName, entity);

其中一个声明"参数数量错误"的异常消失了。所以我现在只有参数类型不匹配的问题。差不多到了…:D

public static JPAQuery find(字符串查询,Object…params(

这个vararg参数只是Object[] params的一个很好的语法。

因此,您需要传入两个参数,String和一个带有实体的Object数组。

JPAQuery query = (JPAQuery)findEntities.invoke(
     null, fieldName, new Object[]{ entity} );
findEntities.invoke(null, args); 

这里的第一个参数应该是从中调用方法的对象。你传递了null,所以它不能工作。

有关更多信息,请参阅文档:http://download.oracle.com/javase/1,5.0/docs/api/java/lang/reflect/Method.html#invoke%28java.lang.Object,%20java.lang.Oobject…%29

此外,我还想试试这条线:

Method findEntities = clazz.getDeclaredMethod("find", params);

Object[] params = new Object[1];
params[0] = Object.class;
Method findEntities = clazz.getDeclaredMethod("find", params);

相关内容

  • 没有找到相关文章

最新更新