这可能是一个愚蠢的问题,但我想了解主题所说的内容。我想在新的新编译单元中向新声明的classOrInterfaceobject添加一个新的String字段。但是从源文件中可以看出,该选项是不可能的。 primitiveClass只保存所有其他基元的枚举,Long,char,bytes等。
我错过了什么吗?或者开发人员忘记了String选项?
解决 感谢Riduidels的回答,我设法破解了代码,可以这么说:)事情就是创建一个新的ClassOrInterfaceType并将其称为String,这很简单。虽然,我必须说,JavaParser背后的人应该考虑为其他Primitives添加String的枚举。工作代码:
{{1}}
谢谢Riduidel!
答案 0 :(得分:1)
嗯,这很正常:JavaParser类型层次结构与Java源文件中的结构非常接近。在源文件中,您不能将字符串直接放在文件中,而是放在文件中声明的类中。
在JavaParser部分Creating a CompilationUnit from scratch中对此进行了详细描述,该内容可以添加为
public class ClassCreator {
public static void main(String[] args) throws Exception {
// creates the compilation unit
CompilationUnit cu = createCU();
// prints the created compilation unit
System.out.println(cu.toString());
}
/**
* creates the compilation unit
*/
private static CompilationUnit createCU() {
CompilationUnit cu = new CompilationUnit();
// set the package
cu.setPackage(new PackageDeclaration(ASTHelper.createNameExpr("java.parser.test")));
// create the type declaration
ClassOrInterfaceDeclaration type = new ClassOrInterfaceDeclaration(ModifierSet.PUBLIC, false, "GeneratedClass");
ASTHelper.addTypeDeclaration(cu, type);
// create a field
FieldDeclaration field = new FieldDeclaration(ModifierSet.PUBLIC, new ClassOrInterface(String.class.getName()), new VariableDeclarator(new VariableDeclaratorId("variableName")))
ASTHelper.addMember(type, field);
return cu;
}
}
这将创建一个包含名为java.parser.test
的包GeneratedClass
中的类的文件,其中包含一个名为GeneratedClass
的简单字段(尽管我没有编译上述代码以确保其正确性)。