Java Reflection - Object不是声明类的实例

tie*_*er1 34 java reflection

这个问题随处可见谷歌,但我仍然遇到问题.这就是我想要做的.所以就像我的标题所说,我得到一个'对象不是声明类的错误的实例'.有任何想法吗?谢谢!

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()反射方法需要知道运行该方法的对象.