为了账号安全,请及时绑定邮箱和手机立即绑定

Java API生成Java源文件

Java API生成Java源文件

HUH函数 2019-11-22 12:52:15
我正在寻找一个生成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源文件。有人知道这样的框架吗?编辑:我真的需要源文件。我也想填写这些方法的代码。我正在寻找一个高级抽象,而不是直接的字节码操作/生成。我还需要对象树中的“类的结构”。问题域很一般:生成大量非常不同的类,而没有“通用结构”。解决方案我已经根据您的答案发布了2个答案... CodeModel和Eclipse JDT。我在解决方案中使用了CodeModel :-)
查看完整描述

3 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

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();

  }

}


查看完整回答
反对 回复 2019-11-22
  • 3 回答
  • 0 关注
  • 698 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信