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

时间:2012-11-11 22:20:51

标签: 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>());

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

2 个答案:

答案 0 :(得分:51)

您正在使用类调用该方法,但您需要一个实例。试试这个:

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

答案 1 :(得分:11)

您正尝试在对象execute上调用base方法,该对象实际上是您Class电话返回的Class.forName()对象。

这只适用于static(类)方法,但execute是非静态(实例)方法。

您需要TestFunction的实际实例来调用方法,或者您需要创建方法static

虽然您当前的示例方法对任何TestFunction对象都会执行相同的操作,但通常实例方法可能会为每个对象生成不同的结果 - 因此.invoke()反射方法需要知道哪个对象在。上运行方法。