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