抛出java.lang.reflect.Method.invoke的Object-result时出现java.lang.ClassCastException

时间:2010-01-17 12:50:21

标签: java eclipse reflection invoke classcastexception

我使用urlClassLoader从我的eclipse rcp应用程序动态加载外部类。 invoke() - 方法返回一个自定义类型的Object。

ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();  
URLClassLoader cl = URLClassLoader.newInstance( url);  
Thread.currentThread().setContextClassLoader(cl);  
String className ="myClass";
Class<?> c = cl.loadClass(className);
Object inst =c.newInstance();
Method run =c.getMethod("run", new Class[0]);
Object rdsObject =run.invoke(inst, new Object[]{});
Thread.currentThread().setContextClassLoader( oldClassLoader );
rts.data.RTSDataSet rds =(rts.data.RTSDataSet) rdsObject;

当我尝试强制转换此Object时,我得到java.lang.ClassCastException:rts.data.RTSDataSet无法强制转换为rts.data.RTSDataSet。在我看来,原因是我在这里有不同的ClassLoader。我的问题是:我应该如何正确设置ClassLoader?
谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

使用URLClassLoader.newInstance的双参数形式将父类加载器设置为调用代码的形式。

 URLClassLoader loaders = URLClassLoader.newInstance(path, this.getClass().getClassLoader());