java.lang.nosuchmethodexception:[ljava.lang.reflect.method;mymethod(java.lang.string,布尔值)

dfty9e19  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(342)

我试图从一个使用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 .

ylamdve6

ylamdve61#

allMethods 属于类型 Method[] ,它没有方法 tryIt(String, boolean) . 你想打电话吗 getMethod()cls 而且你调用的方法也不对,就像 Method.invoke() 需要参数数组而不是 List ,您可能需要这样的方法:

public void invokeMethod(String className, String myMethod, Object... parametersMethod) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException {
    Class<?> cls = Class.forName(className);

    Object obj = cls.newInstance();

    Method m = cls.getMethod(myMethod, String.class, boolean.class);
    m.invoke(obj, parametersMethod);
}

可以这样称呼:

invokeMethod("com.example.MyClass", "tryIt", "SomeString", true);

相关问题