Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASM创建java类_Java - Fatal编程技术网

ASM创建java类

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

我正在尝试使用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.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{}不完全确定代码中出现了什么错误,但您似乎在编写类之前创建了读取器。我已经扩展了这个示例,使其更加完整。