-2

我想初始化一个在编译期间未知的类(但实现了一个已知的接口)。

所以我尝试了这样的事情:

Class<?> cls = class.foreName("NotKnown",true,ClassLoader.getSystemClassLoader());

它在 Eclipse 中工作,但作为一个可运行的 jar 文件,我发现这不起作用,因为它不会加载一个不在你的 classPath 中的类。

我怎样才能使它工作?

4

1 回答 1

0

您需要创建新的类加载器,该类加载器将从新类所在的文件夹中加载类:

ClassLoader cl = new URLClassLoader(new URL[] { ... });
Class<?> cls = cl.loadClass("NotKnown");

即如果你有一个类foo.bar.Baz并且它被编译为/someFolder/foo/bar/Baz.class,你应该使用new File("/someFolder").toURI().toURL()一个文件夹来加载你的类。

于 2012-11-28T12:25:56.603 回答