小编Tar*_*Sha的帖子

访问java ASM中的私有内部类

我有一个包含几个内部类的类.我想生成额外的内部类,使用ASM库与编译时私有内部类进行交互.我的代码看起来像:

public class Parent {

  public void generateClass() {
    ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
    cw.visit(49, Opcodes.ACC_PUBLIC, "Parent$OtherChild", null,
             Type.getInternalName(Child.class), new String[]{});
    // .. generate the class
    byte[] bytes = cw.toByteArray();
    Class<?> genClass = myClassLoader.defineClass("Parent$OtherChild", bytes);
  }

  private static class Child {
  }

}
Run Code Online (Sandbox Code Playgroud)

如图所示,一个简单的交互示例是继承 - 我试图通过扩展私有内部类Child的OtherChild.我在类加载器验证类定义时收到此错误消息:

IllegalAccessError: class Parent$OtherChild cannot access its superclass Parent$Child
Run Code Online (Sandbox Code Playgroud)

有没有办法生成可以与其他私有内部类交互的内部类?您可以假设这是从可以访问私有内部类的"安全区"执行的.

谢谢

java java-bytecode-asm

7
推荐指数
1
解决办法
768
查看次数

标签 统计

java ×1

java-bytecode-asm ×1