如何在方法中声明 类?
How can I get declared classes in method?
这是测试 class。
package com.reflection;
import com.reflection.test.A
public class Main {
public void setA() {
A a = new A();
}
}
然后,我使用 ClassLoader
访问和操作 classes、字段、方法和构造函数,如下面的代码
Class cls = cl.loadClass("com.reflection.Main");
其实我很想用cls
得到A
class,已经试过用getDeclaredClasses
和getClasses
,结果什么都没有。
你不能用纯粹的 Java 反射来做到这一点。反射会让您查看 classes 及其成员,但不会查看方法中的代码。
最简单的事情可能是在构建过程中的某个地方做 javap -v
,解析合格 class 名称的输出并将它们存储在某个地方的 属性 文件中。
更难的版本是使用像 asm 或 ByteBuddy 这样的字节码工具,在 class 中的所有指令上写一个访问者,并将所有指令中的所有 classes 存储在 Map 中。虽然这在理论上是优雅的方法,但它可能是一场噩梦。
这是测试 class。
package com.reflection;
import com.reflection.test.A
public class Main {
public void setA() {
A a = new A();
}
}
然后,我使用 ClassLoader
访问和操作 classes、字段、方法和构造函数,如下面的代码
Class cls = cl.loadClass("com.reflection.Main");
其实我很想用cls
得到A
class,已经试过用getDeclaredClasses
和getClasses
,结果什么都没有。
你不能用纯粹的 Java 反射来做到这一点。反射会让您查看 classes 及其成员,但不会查看方法中的代码。
最简单的事情可能是在构建过程中的某个地方做 javap -v
,解析合格 class 名称的输出并将它们存储在某个地方的 属性 文件中。
更难的版本是使用像 asm 或 ByteBuddy 这样的字节码工具,在 class 中的所有指令上写一个访问者,并将所有指令中的所有 classes 存储在 Map 中。虽然这在理论上是优雅的方法,但它可能是一场噩梦。