我目前正在使用命令行客户端进行自动测试。为此,我希望能够通过给定名称执行请求,所以我必须使用反射。java反射列表NoSuchMethodException
不过,我得到以下错误:
NoSuchMethodException: java.util.ArrayList.add(some.path.Foo)
这个代码:
Object job = Class.forName(sClassName).getConstructor().newInstance();
List<?> jobObject = (List<?>) Request.getClass().getDeclaredMethod(sMethodName).invoke(Request);
jobObject.getClass().getDeclaredMethod("add", job.getClass()).invoke(Request, job);
在另一方面,下面的代码工作(但不是解决办法为Foo应该是动态的,没有硬编码)
Object job = Class.forName(sClassName).getConstructor().newInstance();
List<Foo> jobObject = (List<Foo>) Request.getClass().getDeclaredMethod(sMethodName)).invoke(Request);
jobObject.add((Foo)job);
旁注:
- sClassName = some.path.Foo
- .getDeclaredMethod(sMethod).invoke(请求)返回一个对象(其是列表<美孚>)
什么我想实现的是使代码与动态输入一起工作(例如Bar而不是Foo)
在你的代码中,'Request'是什么? – fxm
请求是一个提供我想测试的服务请求的类。这个请求需要一个可以像上面那样设置的作业,因为Request包含一个带作业对象的列表(在本例中为“Foo”)。 – Zweistein2