3

我正在使用反射从特定类中获取所有方法。

这个类引用了不在我的类路径中的类,所以我得到一个异常:

java.lang.NoClassDefFoundError:

对此:

Method methods[] = theClass.getDeclaredMethods();

是否有可能以某种方式“跳过”不在类路径中的所有内容?

4

1 回答 1

0

Class.forName() 不会加载一个类,无论它是否在类路径中。它只会返回一个已经加载的类的句柄。

类以两种主要方式之一加载:

1.)类在import语句中被引用(java.lang.*是自动导入的,所以java.lang包中的每个类都是从一开始就被类加载的)

2.) 使用来自 ClassLoader 的调用加载一个类,在这种情况下,它的所有依赖项都已解决。并加载

因此,如果您尝试在类路径之外加载一个类,或者在类路径之外加载依赖项,则需要将 ClassLoader 子类化并告诉它如何加载您的类及其依赖项。

请参阅此处的 ClassLoader 规范:http: //docs.oracle.com/javase/1.4.2/docs/api/java/lang/ClassLoader.html

此外,还有现成的 ClassLoader 子类可以执行您想要的操作,例如 URL ClassLoader,它可以让您简单地将 ClassLoader 实例指向路径,并加载该路径中的任何类。

于 2012-11-14T11:30:20.297 回答