我正在使用反射从特定类中获取所有方法。
这个类引用了不在我的类路径中的类,所以我得到一个异常:
java.lang.NoClassDefFoundError:
关于这个:
Method methods[] = theClass.getDeclaredMethods();
是否有可能以某种方式“跳过”不在类路径中的所有内容?
最佳答案
Class.forName() 不会加载类,无论它是否在类路径中。它只会返回一个已经加载的类的句柄。
类以两种主要方式之一加载:
1.)在导入语句中引用类(java.lang.* 自动导入,因此 java.lang 包中的每个类从一开始就被类加载)
2.) 使用类加载器的调用加载类,在这种情况下,它的所有依赖项都已解析。并加载
因此,如果您尝试加载类路径外的类,或者加载类路径外的依赖项,则需要子类化 ClassLoader 并告诉它如何加载您的类及其依赖项。
请在此处查看 ClassLoader 规范:http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/ClassLoader.html
此外,还有现成的 ClassLoader 子类可以执行您想要的操作,例如 URL ClassLoader,它可以让您简单地将 ClassLoader 实例指向路径,并加载该路径中的任何类。
关于java - 反射 getDeclaredMethods() 和不在类路径中的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13377497/