使用java-mongo驱动程序反射的问题

时间:2013-12-27 17:11:23

标签: java reflection mongodb-java illegalargumentexception

我正在尝试此代码http://ideone.com/gymUrP

Object obj2 = coll.getClass().getMethod("find").invoke(coll, new Object[]{});

使用空的第二个参数(匹配find()方法),但我没有设法让其他方法工作,比如带有此签名的方法(Docs

返回的异常始终是 java.lang.IllegalArgumentException:参数数量错误

修改

感谢答案,这接近我所需要的:(虽然有点沉重)

Object[] args = new Object[]{new BasicDBObject("a", 2)};
Class[] types = new Class[args.length];
for (int i=0; i<args.length; i++)
    types[i] = (Class) args[i].getClass().getGenericInterfaces()[0];

Object obj = coll.getClass().getMethod("find", types).invoke(coll, args);
System.out.println(obj);

2 个答案:

答案 0 :(得分:2)

它应该可以使用此调用,传递DBOject参数并获取期望此参数的方法:

DBOject dbo = ...
Object obj2 = coll.getClass().getMethod("find", DBOject.class).invoke(coll, dbo);

(我假设collDBCollection个对象。)

答案 1 :(得分:0)

Reflection API我说你错过了parameterTypes。我认为它是:

Object obj2 = coll.getClass().getMethod("find", new Class[]{})
                             .invoke(coll, new Object[]{});

Object obj2 = coll.getClass().getMethod("find",null)
                             .invoke(coll, new Object[]{});

同样查看this example