0

This might be a stupid question, but i want to acchive what the subject states. I want to add a new String field to a newly declared classOrInterfaceobject in a new new compilationUnit. But from what i can tell from the sourcefiles, that option is not possible. The primitiveClass only holds enums for all the other primitives, Long, char, bytes etc.

Am i missing something? Or have the developers forgot about the String option?

SOLVED Thanks to Riduidels answer, i managed to crack the code, so to speak :) The thing was to create a new ClassOrInterfaceType and calling it String, simple enough. Though, i must say, that the people behind JavaParser should look into adding a enum for String as they have for the other Primitives. Working code:

public static void main(String[] args){
    // TODO Auto-generated method stub
     // 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 = ASTHelper.createFieldDeclaration(ModifierSet.PUBLIC, new ClassOrInterfaceType("String"),"test");

    ASTHelper.addMember(type, field);



    return cu;
}

Thanks Riduidel!

4

1 に答える 1

1

それはごく普通のことです。JavaParser 型の階層は、Java ソース ファイルにあるものに非常に近いものです。また、ソース ファイルでは、文字列をファイルに直接配置するのではなく、ファイルで宣言されたクラスに配置します。

これについては、JavaParser のセクション「CompilationUnit を最初から作成する」で詳しく説明されています。

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名前のパッケージにクラスを含むファイルが作成されます(ただし、上記のコードは正確さを保証するためにコンパイルしていません)。GeneratedClassGeneratedClass

于 2016-08-16T09:28:04.577 に答える