Java 使用getMethod从另一个类调用方法会出现错误

Java 使用getMethod从另一个类调用方法会出现错误,java,reflection,hashset,Java,Reflection,Hashset,因此,正如标题所描述的,我需要帮助从一个类调用一个方法到另一个类。因此,进一步解释一下:我将类存储在哈希集中。现在我试图访问位于该HashSet中选择的类中的方法,但它给出了一个错误: java.lang.IllegalArgumentException:对象不是声明类的实例 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(未知源) 在sun.re

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

java.lang.IllegalArgumentException:对象不是声明类的实例
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(未知源) 在sun.reflect.DelegatingMethodAccessorImpl.invoke处(未知源) 位于java.lang.reflect.Method.invoke(未知源)

代码:

Class needClass=taskHandler.getTaskClass(“NodeMovementTask”);
试一试{
getMethod(“addToQueue”,Timeline.class,int.class).invoke(Timeline,cycleCount);
}捕获(IllegalAccessException | IllegalArgumentException
|InvocationTargetException | NoSuchMethodException
|证券例外(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;
}
public类getTaskClass(stringclasstosearch){
Class returningClass=null;
对于(类foundClass:任务){
if(foundClass.getName().equalsIgnoreCase(“包”+classToSearch)){
System.out.println(“Found!”);
returningClass=foundClass;
}
}
返回类;
}

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

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

哦,是的,我明白了。但不知怎么的,这也很奇怪。所需的实例是neededClass,所以,按照实例的顺序,我将neededClass放在那里<代码>neededClass.getMethod(“addToQueue”,Timeline.class,int.class).invoke(neededClass,Timeline,cycleCount)。天哪,我糊涂了。就是这么做的,这就是我使用
neededClass
needClass.getClass()
java.lang.IllegalArgumentException:对象不是声明类的实例-Erlandsson@Sh0ck您不能将
neededClass
放在那里-这是一个
Class
对象。您需要在那里放置
neededClass
的实例。如果您还没有这样的实例,那么也可以通过调用
neededClass.newInstance()
(假设没有参数构造函数,否则您必须获取构造函数并调用它)反射式地创建它。
neededClass.getMethod("addToQueue", Timeline.class, int.class)
     .invoke(instance, timeline, cycleCount);
             ^^^^^^^^