从代码创建新类

时间:2011-06-07 06:43:39

标签: java eclipse class reflection eclipse-jdt

有没有办法在执行期间创建一个新的java类?存在关于类(名称,修饰符,方法,字段等)的所有信息。现在我想创建该类。一个想法是创建一个新文件并将内容写入该文件,c'est fini!但我认为有更优雅的方法可以做到这一点,也许是JDT?

3 个答案:

答案 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/