【发布时间】:2011-08-25 21:39:25
【问题描述】:
我正在使用以下代码在java中动态加载一个类:
URL url = new File(ACTIONS_PATH).toURI().toURL();
URLClassLoader clazzLoader = new URLClassLoader(new URL[]{url});
Class<RatingAction> clazz = (Class<RatingAction>) clazzLoader.loadClass(name);
return clazz.newInstance();
此代码适用于简单的类(无继承或接口),但我要加载的类正在实现一个接口(类加载器可以使用 findClass 找到该接口)
当我调用 class.newInstance 时,我得到了提到的异常。
我做错了什么?
谢谢。
【问题讨论】:
-
我不确定你的问题,但是要写
Class<RatingAction>,你应该加载类RatingAction,但是这个类型必须已经加载,你才能写这个。你的意思是Class<? extends RatingAction>? -
我能够通过简单地使用
Class.forname(name).newInstance来规避这个问题,但我很乐意理解为什么原始代码不起作用 -
因为这次你没有使用自定义的类加载器。
-
你这里用的同一个URLClassLoader能找到接口吗?
-
@Paulo 是的,类加载器可以找到接口
标签: java reflection classloader