java.lang.NoSuchMethodException:[Ljava.lang.reflect.Method; .myMethod(java.lang.String,boolean)

时间:2019-02-04 14:38:12

标签: java jboss stateless

我正在尝试使用Java 1.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,boolean)

我尝试使用布尔值而不是布尔值,但是没有任何变化。

invokeMethod在使用Jboss 7的Web服务上,我所有的类都是@StateLess

1 个答案:

答案 0 :(得分:1)

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);