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方法需要知道运行该方法的对象。