java - 反射 getDeclaredMethods() 和不在类路径中的类

标签 java reflection

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

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

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/

相关文章:

java - 如何向 ConnectableFlowable 发送取消信号?

c# - .NET 框架 : Get Type from TypeInfo

C# Assembly.Load 与 Assembly.ReflectionOnlyLoad

java - 解析数据时出错 org.json.JSONException : Value of type java. lang.String 无法转换为 JSONArray

java - 每次执行时将数据输出到 outFile(Java)

c# - 如何查明特定委托(delegate)是否已分配给某个事件?

c# - 将对象转换为 IEnumerable<T>,其中 T 未知

java - 如何使用反射从外部 JAR 文件检索一些资源

java - 如何使用 Spring Boot 从 java 属性文件中读取数据

java - spring rabbit amqp @RabbitListener 配置消费者的最小和最大数量