我正在使用反射从特定类中获取所有方法。
这个类引用了不在我的类路径中的类,因此我会收到一个异常:
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实例指向路径,并加载该路径中的任何类。