我正在尝试此代码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);
答案 0 :(得分:2)
它应该可以使用此调用,传递DBOject
参数并获取期望此参数的方法:
DBOject dbo = ...
Object obj2 = coll.getClass().getMethod("find", DBOject.class).invoke(coll, dbo);
(我假设coll
是DBCollection
个对象。)
答案 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。