来自远程目录的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问题 。