創建新的類有沒有辦法在執行期間創建一個新的java類?所有關於類的信息(名稱,修飾符,方法,字段等)都存在。現在我想創建這個類。一個想法是創建一個新文件並將其寫入該文件,c'est fini!但我認爲有更多優雅的方式可以實現這一點,也許使用JDT?從代碼
Q
從代碼
3
A
回答
4
要麼使用BCEL
創建字節碼和類文件(困難的方式),要麼在內存中創建源代碼並使用Java 6 Compiler API(這就是我所要做的)。但使用Compiler API時,運行應用程序時需要Java SDK,但JRE是不夠的。
進一步閱讀
(目前在網絡上有很多教程)
1
看代碼生成庫, http://cglib.sourceforge.net/ HTTP:// WWW。 csg.is.titech.ac.jp/~chiba/javassist/
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"));
// ....
囉嗦:-)但是您可以隨時訪問JDT Java核心模型。
如果您需要生成文件到您的eclipse工作區,也有基於模板的選項,如JET。
但是,如果你想在Java應用程序運行時動態生成並加載.class文件,請嘗試@Andreas_D建議。
相關問題
你真的需要這個嗎?聽起來有點哈克... – Tobias 2011-06-07 06:45:57
@Tobiask,很多中間件都這樣做。這是相當普遍的任務(簡單情況下JSP就是這樣),需要一些像ASM/BCEL和自定義類加載器的庫,並且完成了。 – bestsss 2011-06-07 06:50:11
@bestsss好吧,謝謝你 – Tobias 2011-06-07 06:51:38