如何在方法中声明 类?

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得到Aclass,已经试过用getDeclaredClassesgetClasses,结果什么都没有。

你不能用纯粹的 Java 反射来做到这一点。反射会让您查看 classes 及其成员,但不会查看方法中的代码。

最简单的事情可能是在构建过程中的某个地方做 javap -v,解析合格 class 名称的输出并将它们存储在某个地方的 属性 文件中。

更难的版本是使用像 asm 或 ByteBuddy 这样的字节码工具,在 class 中的所有指令上写一个访问者,并将所有指令中的所有 classes 存储在 Map 中。虽然这在理论上是优雅的方法,但它可能是一场噩梦。