我正在尝试动态加载一个类并从我的Servlet中调用它的一个方法。
在我的Servlet中,我有以下代码:
PrintWriter out = response.getWriter();
try {
Class<?> obj = Class.forName(myclassName);
Method method = obj.getClass().getMethod(myMethodName);
String returnValue = (String) method.invoke(obj, null);
out.println(returnValue);
}
catch(Exception e){}
在课堂上我有:
public class StudentClass {
public String index()
{
return "This is From StudentClass";
}
}
问题是当我运行我的应用程序时它不会显示任何内容。我希望得到This is From StudentClass
作为输出,这个类的基本index
方法正在返回。
你能告诉我如何解决这个问题吗?
答案 0 :(得分:1)
您的invoke
用法错误:
Class<?> obj = Class.forName(myclassName); // this return a Class, not an instance
Method method = obj.getClass().getMethod(myMethodName);
String returnValue = (String) method.invoke(obj, null);
正确使用会是这样的:
Class<?> clazz = Class.forName(myclassName);
Object obj = clazz.newInstance(); // this give you a StudentClass instance
Method method = clazz.getMethod(myMethodName);
String returnValue = (String) method.invoke(obj);
另请参阅Class.forName(String)
和Method.invoke(Object, Object...)
以及this tutorial on reflection API。