Java反射 - 对象不是声明类的一个实例(Java Reflection - Object is

2019-07-03 18:02发布

这个问题被问无处不在谷歌,但我仍然有它的麻烦。 这里是我想要做的事。 所以像我的标题状态,我发现了一个“对象不是声明类的一个实例”的错误。 有任何想法吗? 谢谢!

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

Answer 1:

你调用方法与类,但你需要它的一个实例。 试试这个:

serverMethod.invoke(base.newInstance(), new HashMap<String, String>());


Answer 2:

您正在尝试调用execute的对象方法base ,这实际上是一个Class你返回的对象Class.forName()调用。

这将仅适用于工作static (类)方法,但是execute是一个非静态(实例)方法。

你需要的实际情况TestFunction来调用方法,或者你需要做的的方法static

虽然当前的实例方法会做同样的事,任何TestFunction对象,一般的实例方法可以为每个对象不同的结果-所以.invoke()反射方法需要知道哪个对象上运行的方法。



文章来源: Java Reflection - Object is not an instance of declaring class