使用JavaParser将String字段添加到新的compilationUnit

时间:2016-08-16 09:18:01

标签: java javaparser

这可能是一个愚蠢的问题,但我想了解主题所说的内容。我想在新的新编译单元中向新声明的classOrInterfaceobject添加一个新的String字段。但是从源文件中可以看出,该选项是不可能的。 primitiveClass只保存所有其他基元的枚举,Long,char,bytes等。

我错过了什么吗?或者开发人员忘记了String选项?

解决 感谢Riduidels的回答,我设法破解了代码,可以这么说:)事情就是创建一个新的ClassOrInterfaceType并将其称为String,这很简单。虽然,我必须说,JavaParser背后的人应该考虑为其他Primitives添加String的枚举。工作代码:

{{1}}

谢谢Riduidel!

1 个答案:

答案 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的简单字段(尽管我没有编译上述代码以确保其正确性)。