ASM创建java类
我正在尝试使用ASM创建一个简单的类文件 我尝试了以下方法:ASM创建java类,java,Java,我正在尝试使用ASM创建一个简单的类文件 我尝试了以下方法: ClassPrinter c = new ClassPrinter(); ClassReader cr = new ClassReader(new FileInputStream("path/to/class")); ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS|ClassWriter.COMPUTE_FRAMES); cw.newC
ClassPrinter c = new ClassPrinter();
ClassReader cr = new ClassReader(new FileInputStream("path/to/class"));
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS|ClassWriter.COMPUTE_FRAMES);
cw.newClass("MyClass");
cw.newField("owner", "value", "I");
cr.accept(c, 0);
for(String s : c.values){
System.out.println(s);
}
ClassReader writerReader = new ClassReader(new FileInputStream("C:\\generated.class"));
writerReader.accept(cw,0);
但是,在创建类读取器时存在ArrayIndexOutOfBoundsException
C:\generated.class现在是一个空文件
ClassPrinter是一个访问者,它只需遍历所有实体并使用system.out.println打印它们
如何做到这一点
我需要能够从头开始创建类,而不仅仅是附加到现有的类
依赖项:
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
<version>5.0.3</version>
</dependency>
org.ow2.asm
asm
5.0.3
您似乎从未编写过文件“C:\generated.class”
你的代码片段中什么是cr,什么是c
在打开读卡器之前,似乎缺少以下内容:
String filename = "C:\\generated.class";
// Generate class
System.out.println("Generating MyClass");
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS|ClassWriter.COMPUTE_FRAMES);
cw.newClass("MyClass");
cw.newField("owner", "value", "I");
// Print generated class to STDIO to see that is generated as expected
System.out.println("Generated:");
ClassPrinter cp = new ClassPrinter();
cp.accept(cw, 0);
// Write the generated class to a file
System.out.println("Writing " + filename);
FileOutputStream os = new FileOutputStream(filename);
os.write(cw.toByteArray());
os.close();
// Read the file back
System.out.println("Reading " + filename);
ClassReader cr = new ClassReader(new FileInputStream("C:\\generated.class"));
// Print the class
System.out.println("Read");
cr.accept(c, 0);
cr.accept(cw,0);
我添加了这个,writerReader生成得很好,但是当我接受时,我得到一个ll指针异常。请注意,如果使用ASM读取所编写的文件,则会导致null extends null{}不完全确定代码中出现了什么错误,但您似乎在编写类之前创建了读取器。我已经扩展了这个示例,使其更加完整。