有没有办法在执行期间创建一个新的java类?存在关于类(名称,修饰符,方法,字段等)的所有信息。现在我想创建该类。一个想法是创建一个新文件并将内容写入该文件,c'est fini!但我认为有更优雅的方法可以做到这一点,也许是JDT?
答案 0 :(得分:4)
使用BCEL
创建字节代码和类文件(困难的方式)或在内存中创建源代码并使用Java 6编译器API(这就是我要做的)。但是使用Compiler API,在运行应用程序时需要Java SDK,JRE是不够的。
进一步阅读
(网上有很多教程)
答案 1 :(得分:3)
如果您正在编写eclipse插件,并且希望工具在项目中生成代码,则可以使用AST与JDT进行交互。还有一种从运行时调用Eclipse批处理编译器的方法。
AST ast = AST.newAST(AST.JLS3);
CompilationUnit unit = ast.newCompilationUnit();
PackageDeclaration packageDeclaration = ast.newPackageDeclaration();
packageDeclaration.setName(ast.newSimpleName("example"));
unit.setPackage(packageDeclaration);
ImportDeclaration importDeclaration = ast.newImportDeclaration();
QualifiedName name =
ast.newQualifiedName(
ast.newSimpleName("java"),
ast.newSimpleName("util"));
importDeclaration.setName(name);
importDeclaration.setOnDemand(true);
unit.imports().add(importDeclaration);
TypeDeclaration type = ast.newTypeDeclaration();
type.setInterface(false);
type.modifiers().add(ast.newModifier(Modifier.ModifierKeyword.PUBLIC_KEYWORD));
type.setName(ast.newSimpleName("HelloWorld"));
// ....
long winded :-)但是你可以随时访问JDT java核心模型。
如果您需要在eclipse工作区中生成文件,还有基于模板的选项,例如JET。
但是如果你想在java应用程序的运行时中动态生成和加载.class文件,请尝试@Andreas_D建议。
答案 2 :(得分:1)
查看代码生成库, http://cglib.sourceforge.net/ http://www.csg.is.titech.ac.jp/~chiba/javassist/