我正在使用反射从特定类中获取所有方法。
这个类引用了不在我的类路径中的类,所以我得到一个异常:
java.lang.NoClassDefFoundError:
对此:
Method methods[] = theClass.getDeclaredMethods();
是否有可能以某种方式“跳过”不在类路径中的所有内容?
我正在使用反射从特定类中获取所有方法。
这个类引用了不在我的类路径中的类,所以我得到一个异常:
java.lang.NoClassDefFoundError:
对此:
Method methods[] = theClass.getDeclaredMethods();
是否有可能以某种方式“跳过”不在类路径中的所有内容?
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 实例指向路径,并加载该路径中的任何类。