这个问题随处可见谷歌,但我仍然遇到问题.这就是我想要做的.所以就像我的标题所说,我得到一个'对象不是声明类的错误的实例'.有任何想法吗?谢谢!
Main.java
Class<?> base = Class.forName("server.functions.TestFunction");
Method serverMethod = base.getMethod("execute", HashMap.class);
serverMethod.invoke(base, new HashMap<String, String>());
Run Code Online (Sandbox Code Playgroud)
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";
}
}
Run Code Online (Sandbox Code Playgroud)
rav*_*981 52
您正在使用类调用该方法,但您需要一个实例.试试这个:
serverMethod.invoke(base.newInstance(), new HashMap<String, String>());
Run Code Online (Sandbox Code Playgroud)
DNA*_*DNA 11
您正在尝试execute在对象上调用该方法base,该方法实际上是Class您的Class.forName()调用返回的对象.
这只适用于static(类)方法,但是execute是非静态(实例)方法.
您需要一个实际的实例TestFunction来调用该方法,或者您需要创建该方法static.
虽然您当前的示例方法对任何TestFunction对象都会执行相同的操作,但通常实例方法可能会为每个对象生成不同的结果 - 因此.invoke()反射方法需要知道运行该方法的对象.