gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:34:27 26 4
gpt4 key购买 nike

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

java.lang.IllegalArgumentException: object is not an instance of declaring class
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source).

代码:

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

最佳答案

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

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

关于java - 使用 getMethod 从另一个类调用方法会出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31012310/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com