我正在寻找一个框架来生成Java源文件。
类似于下面的API:
X clazz = Something.createClass("package name", "class name");
clazz.addSuperInterface("interface name");
clazz.addMethod("method name", returnType, argumentTypes, ...);
File targetDir = ...;
clazz.generate(targetDir);
然后,应该在目标目录的子目录中找到java源文件。
有人知道这样的框架吗?
编辑
还需要对象树中的“类结构”。
<>G214>
解决方案
我已经根据你的答案发布了2个答案...with CodeModel和with Eclipse JDT。
我在我的解决方案中使用了CodeModel :-)
发布于 2008-09-23 16:41:46
Sun提供了一个名为CodeModel的应用程序接口,用于使用应用程序接口生成Java源文件。这并不是获取信息最容易的事情,但它就在那里,而且工作得非常好。
获得它的最简单方法是将其作为JAXB2RI的一部分-- XJC schema- to -java生成器使用CodeModel生成其java源代码,并且它是XJC的一部分。您可以将其仅用于CodeModel。
发布于 2008-09-25 20:53:37
通过CodeModel找到解决方案
谢谢,skaffman。
例如,使用以下代码:
JCodeModel cm = new JCodeModel();
JDefinedClass dc = cm._class("foo.Bar");
JMethod m = dc.method(0, int.class, "foo");
m.body()._return(JExpr.lit(5));
File file = new File("./target/classes");
file.mkdirs();
cm.build(file);
我可以得到以下输出:
package foo;
public class Bar {
int foo() {
return 5;
}
}
发布于 2008-09-25 20:54:11
使用Eclipse JDT的AST找到解决方案
谢谢,Giles。
例如,使用以下代码:
AST ast = AST.newAST(AST.JLS3);
CompilationUnit cu = ast.newCompilationUnit();
PackageDeclaration p1 = ast.newPackageDeclaration();
p1.setName(ast.newSimpleName("foo"));
cu.setPackage(p1);
ImportDeclaration id = ast.newImportDeclaration();
id.setName(ast.newName(new String[] { "java", "util", "Set" }));
cu.imports().add(id);
TypeDeclaration td = ast.newTypeDeclaration();
td.setName(ast.newSimpleName("Foo"));
TypeParameter tp = ast.newTypeParameter();
tp.setName(ast.newSimpleName("X"));
td.typeParameters().add(tp);
cu.types().add(td);
MethodDeclaration md = ast.newMethodDeclaration();
td.bodyDeclarations().add(md);
Block block = ast.newBlock();
md.setBody(block);
MethodInvocation mi = ast.newMethodInvocation();
mi.setName(ast.newSimpleName("x"));
ExpressionStatement e = ast.newExpressionStatement(mi);
block.statements().add(e);
System.out.println(cu);
我可以得到以下输出:
package foo;
import java.util.Set;
class Foo<X> {
void MISSING(){
x();
}
}
https://stackoverflow.com/questions/121324
复制相似问题