使用getMethod从另一个类调用方法会产生错误

时间:2015-06-23 19:57:03

标签: java reflection hashset

因此,正如标题所描述的那样,我需要帮助调用从一个类到另一个类的方法。所以,进一步解释一下:我将类存储在HashSet中。现在我正在尝试访问位于该HashSet中所选类的方法,但它反而给出了我的错误:

  

java.lang.IllegalArgumentException:object不是声明类
的实例   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)   at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)   在java.lang.reflect.Method.invoke(未知来源)。

代码:

 Class<Task> neededClass = taskHandler.getTaskClass("NodeMovementTask");
                try {
                    neededClass.getMethod("addToQueue", Timeline.class, int.class).invoke(timeline, cycleCount);
                } catch (IllegalAccessException | IllegalArgumentException
                        | InvocationTargetException | NoSuchMethodException
                        | SecurityException e) {
                    e.printStackTrace();
                }

这就是getTaskClass方法

public Class<Task> getTaskClass(String classToSearch) {
    Class<Task> returningClass = null;
    for(Class<Task> foundClass : tasks) {
        if(foundClass.getName().equalsIgnoreCase("packages." + classToSearch)) {
            System.out.println("Found!");
            return returningClass = foundClass;
        }
    }
    return returningClass;
}

1 个答案:

答案 0 :(得分:2)

invoke方法的第一个参数是要调用方法的对象实例。如果方法是静态的,您只需提供null作为第一个参数。否则,您需要提供实际要调用该方法的实例:

neededClass.getMethod("addToQueue", Timeline.class, int.class)
     .invoke(instance, timeline, cycleCount);
             ^^^^^^^^