转换 java.lang.reflect.Method.invoke 的对象结果时出现 java.lang.ClassCastException

标签 java eclipse reflection invoke classcastexception

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

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;

当我尝试转换此对象时,出现 java.lang.ClassCastException : rts.data.RTSDataSet 无法转换为 rts.data.RTSDataSet。在我看来,原因是我这里有不同的类加载器。我的问题是:我应该如何正确设置类加载器?
感谢您的帮助!

最佳答案

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

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

关于转换 java.lang.reflect.Method.invoke 的对象结果时出现 java.lang.ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2081000/

相关文章:

java - 在 IDEA 中引用不同文件夹中的类

java - 在 Debug模式下Arraylist的逻辑结构是Array

c# - 如何将此 Java 代码移植到 C# 中?

c# - 有没有办法通过 .NET 中的反射调用显式实现的方法/属性?

java - 类似于 Delphi 中的 JFreeChart

java - catch block 方法中的递归调用返回值

java - 在 config.ini 中设置默认透视图 (Eclipse IDE)

java - 通过反射调用可变参数方法

java - 是否可以在下面的代码片段中使用方法引用

php - 输入类时 Eclipse IDE 挂起