谷歌的这个问题随处可见,但我仍然遇到问题。这就是我想要做的。所以就像我的标题所说,我得到一个'对象不是声明类的错误的实例'。有任何想法吗?谢谢!
Main.java
Class<?> base = Class.forName("server.functions.TestFunction");
Method serverMethod = base.getMethod("execute", HashMap.class);
serverMethod.invoke(base, new HashMap<String, String>());
TestFunction.java
package server.functions;
import java.util.HashMap;
import java.util.Map;
import server.*;
public class TestFunction extends ServerBase {
public String execute(HashMap<String, String> params)
{
return "Test function successfully called";
}
}
答案 0 :(得分:51)
您正在使用类调用该方法,但您需要一个实例。试试这个:
serverMethod.invoke(base.newInstance(), new HashMap<String, String>());
答案 1 :(得分:11)
您正尝试在对象execute
上调用base
方法,该对象实际上是您Class
电话返回的Class.forName()
对象。
这只适用于static
(类)方法,但execute
是非静态(实例)方法。
您需要TestFunction
的实际实例来调用方法,或者您需要创建方法static
。
虽然您当前的示例方法对任何TestFunction
对象都会执行相同的操作,但通常实例方法可能会为每个对象生成不同的结果 - 因此.invoke()
反射方法需要知道哪个对象在。上运行方法。