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