我使用以下代码在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时,我得到了提到的异常。
我做错了什么?
谢谢。
答案 0 :(得分:2)
您的类路径有问题。我的猜测是因为你没有定义父类加载器 - “url”是否包含所有需要的类,包括系统类?
当实际解析类时,您将获得异常,因此也会加载出现在已加载类中的类。如果您将clazzLoader.loadClass(name)
更改为clazzLoader.loadClass(name, true)
,则会在loadClass行中获得异常。
尝试以下方法:
URL url = new File(ACTIONS_PATH).toURI().toURL();
URLClassLoader clazzLoader = new URLClassLoader(new URL[]{url}, getClass().getClassLoader());
Class<RatingAction> clazz = (Class<RatingAction>) clazzLoader.loadClass(name);
return clazz.newInstance();