Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.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_Java Bytecode Asm - Fatal编程技术网

我可以使用ASM的同一个“生成器”生成Java字节码和源代码吗?

我可以使用ASM的同一个“生成器”生成Java字节码和源代码吗?,java,java-bytecode-asm,Java,Java Bytecode Asm,我的GoogleFoo让我失望了。如果我有一个框架可以基于注释生成代码,我想同时支持构建时源代码生成,这样开发人员可以提前编译,也可以查看生成的内容,甚至可能修改代码,还可以为更动态的应用程序提供运行时字节码生成,例如,基于插件的应用程序,我可以使用ASM完成这两项任务,还是真的需要使用两个不同的库对其进行两次编程?如果可能,欢迎链接到示例。虽然这不能直接回答问题,但我建议使用over ASM 使用Javassist,您首先要生成源代码,然后将其交给Javassist编译器转换成字节码,这样您现

我的GoogleFoo让我失望了。如果我有一个框架可以基于注释生成代码,我想同时支持构建时源代码生成,这样开发人员可以提前编译,也可以查看生成的内容,甚至可能修改代码,还可以为更动态的应用程序提供运行时字节码生成,例如,基于插件的应用程序,我可以使用ASM完成这两项任务,还是真的需要使用两个不同的库对其进行两次编程?如果可能,欢迎链接到示例。

虽然这不能直接回答问题,但我建议使用over ASM


使用Javassist,您首先要生成源代码,然后将其交给Javassist编译器转换成字节码,这样您现在就可以无需任何额外的技巧就同时使用这两种代码。另外,IMHO,为Javassist生成源代码要比使用字节码和ASM容易得多

虽然这不能直接回答问题,但我建议使用over ASM


使用Javassist,您首先要生成源代码,然后将其交给Javassist编译器转换成字节码,这样您现在就可以无需任何额外的技巧就同时使用这两种代码。另外,IMHO,为Javassist生成源代码要比使用字节码和ASM容易得多

对于构建时代码生成,我建议使用EclipseJava编译器,它没有用于生成代码的开放API,但实际上非常易于使用。您可以在这里查看如何使用它:这段代码主要是由我编写的。还有一个例子说明了如何在MyClassLoader内部类中动态加载已编译的类。

对于构建时代码生成,我建议使用eclipse java编译器,它没有用于此目的的开放API,但实际上非常易于使用。您可以在这里查看如何使用它:这段代码主要是由我编写的。还有一个例子说明了如何在MyClassLoader内部类中动态加载已编译类。

我不确定这对我是否有用,但我给你+1作为输入:你可以在这里起诉它,哈哈!我不确定这对我是否有用,但我给你+1的打字错误:你可以在这里起诉它,哈哈!我明白你的意思。我刚才看过Javaassist。如果没有人知道,那么这可能就是我要做的。我又看了一遍,我也不知道如何使用Javassist做到这一点。用于生成类文件的源代码可能包含$cflow…,因此它不是真正的Java代码。我只能看到在CtClass中保存编译类的方法。你确定这是支持的吗?一天后没有其他答案。ASM一定不可能,所以你得到了分数。我明白你的意思。我刚才看过Javaassist。如果没有人知道,那么这可能就是我要做的。我又看了一遍,我也不知道如何使用Javassist做到这一点。用于生成类文件的源代码可能包含$cflow…,因此它不是真正的Java代码。我只能看到在CtClass中保存编译类的方法。你确定这是支持的吗?一天后没有其他答案。在ASM中一定不可能,因此您可以获得分数。