我试图从一个使用Java1.7的类中获取一个方法。
非常奇怪的是,如果我打印methodname及其参数,与我使用的相同,但我总是得到:java.lang.nosuchmethodexception:
这是我的密码:
public void invokeMethod(String className, String myMethod, List<Object> parametersMethod) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException{
Class<?> cls = Class.forName(className);
Method[] allMethods = cls.getDeclaredMethods();
for(Method m : cls.getDeclaredMethods()){
Type[] types = m.getParameterTypes();
String tmp="";
for (Type type : types) {
tmp+=type+" ";
}
log.info(" " +m.getName()+" "+tmp); //
}
Object obj = cls.newInstance();
log.info("myMethod "+myMethod);
Method m= allMethods.getClass().getMethod(myMethod, String.class, boolean.class);
log.info("m "+m.getName()+ " "+m.getParameterTypes()+ " "+m.getDefaultValue());
m.invoke(obj, parametersMethod); }
下面是我尝试调用的方法:
public void tryIt(String myString, boolean mybool) throws Exception {
//Do something
}
log.info打印: tryIt class java.lang.String boolean
但当我尝试使用 Method m= allMethods.getClass().getMethod(myMethod, String.class, boolean.class);)
:
java.lang.nosuchmethodexception:[ljava.lang.reflect.method;。tryit(java.lang.string,布尔值)
我试着用布尔值代替布尔值,但没有任何改变。
invokemethod在使用JBoss7的Web服务上,我的所有类都是 @StateLess
.
1条答案
按热度按时间ylamdve61#
allMethods
属于类型Method[]
,它没有方法tryIt(String, boolean)
. 你想打电话吗getMethod()
在cls
而且你调用的方法也不对,就像Method.invoke()
需要参数数组而不是List
,您可能需要这样的方法:可以这样称呼: