我目前正在使用Class.forName()
加载Java类来加载它。
clazz = Class.forName("interfaces.MyClass");
但是现在我想从不同的目录加载类,我试图通过
设置classpathclazz = Class.forName("-cp \"C:/dir\" distantinterfaces.DistantClass");
没有成功,ClassNotFoundException
。远程班级的完整路径是:
C:/dir/distantinterfaces/DistantClass.class
答案 0 :(得分:9)
为此使用URLClassLoader
。代码可能是:
File f = new File("C:/dir");
URL[] cp = {f.toURI().toURL()};
URLClassLoader urlcl = new URLClassLoader(cp);
Class clazz = urlcl.loadClass("distantinterfaces.DistantClass");
答案 1 :(得分:3)
目录在类路径中,您可以使用Class.forName()
(只接受fuly限定名称类,而不是-cp
命令行选项),或者它不在类路径中,你应该然后使用自定义类加载器。
你不是说你真正想做什么(你为什么要动态加载类),但最好的办法是让目录在类路径中。
答案 2 :(得分:1)
您必须创建一个ClassLoader实例,该实例知道带有类的目录。请参阅stackoverflow questions tagged urlclassloader。