我正在使用Java中的ASM库从已编译的.class文件中提取类的信息。现在,我无法获取在运行时实现的抽象类的信息。
JVM在哪里存储在运行时实例化的抽象类的信息?像下面的示例。
public MockAbstractClass testForAbstract(){
return new MockAbstractClass() {
@Override
void abstractMethod() {
mockMethod();
}
}; }
static abstract class MockAbstractClass{
abstract void abstractMethod(); }
此处的MockAbstractClass对象是在运行时通过testForAbstract()方法创建的,该类也是在运行时实现的。
答案 0 :(得分:1)
Lambda是一个在运行时生成类的示例。
访问动态生成的类的唯一方法是通过Instrumentation存储它们。对于以任何方式定义的每个类都有一个组件被调用。然后,您需要存储对这些类的字节码的引用。您可以对此进行优化,以不将类存储在可以从类加载器中检索字节代码的位置。
注意:对于lambda,您不会获得类名或类加载器,但可以读取字节码来获取类名。