0

我开始使用 asm 在运行时生成类。我从一个非常简单的类开始,它只有一个 String 字段和一个 getter。

ClassWriter cw = new ClassWriter(0);
String Name = "Sample";
            cw.visit(Opcodes.V1_5, Opcodes.ACC_PUBLIC ,
                    Name, null,"java/lang/Object",
                    new String[] {});
                    cw.visitField(Opcodes.ACC_PRIVATE, "punit", "Ljava/lang/String;",
                    null, "sac").visitEnd();
            MethodVisitor mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "getUnit",
                    "()Ljava/lang/String;", null, null);

            mv.visitCode();
            mv.visitVarInsn(Opcodes.ALOAD, 0);
            mv.visitFieldInsn(Opcodes.GETFIELD, destinationName+"Configuration", "unit", "Ljava/lang/String;");
            mv.visitInsn(Opcodes.ARETURN);
            mv.visitMaxs(1, 1);
            mv.visitEnd();           
            cw.visitEnd();

            byte[] b = cw.toByteArray();

创建字节数组后,我创建了一个自定义类加载器并调用它的 defineClass 方法来获取 Class 对象。

然后我在这个对象上调用 newInstance() 但我得到了一个 InstantiationException。当我调试代码时,我发现它没有为新创建的类找到构造函数!

我也应该为该类生成一个构造函数吗?

4

0 回答 0