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

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

Main.java

Class base = Class.forName("server.functions.TestFunction"); Method serverMethod = base.getMethod("execute", HashMap.class); serverMethod.invoke(base, new HashMap()); 

TestFunction.java

 package server.functions; import java.util.HashMap; import java.util.Map; import server.*; public class TestFunction extends ServerBase { public String execute(HashMap params) { return "Test function successfully called"; } } 

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

 serverMethod.invoke(base.newInstance(), new HashMap()); 

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

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

您需要一个实际的TestFunction实例来调用该方法,或者您需要使该方法保持static

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