java.lang.ClassCastException при приведении объекта-результата java.lang.reflect.Method.invoke - PullRequest
1 голос
/ 17 января 2010

Я динамически загружаю внешний класс из моего приложения eclipse rcp с помощью urlClassLoader. Метод 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 Мне кажется, что причина в том, что у меня здесь другой ClassLoader. Мой вопрос: как правильно установить ClassLoader?
Спасибо за помощь!

1 Ответ

1 голос
/ 17 января 2010

Используйте форму с двумя аргументами URLClassLoader.newInstance, чтобы установить в качестве загрузчика родительского класса код вызова.

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