2016-08-16 5 views
0

これは愚かな質問かもしれませんが、私はその主題が何を語っているかを知りたいと思います。私は、新たに宣言されたclassOrInterfaceオブジェクトに、新しい新しいCompilationUnitで新しいStringフィールドを追加したいと考えています。しかし、私がソースファイルから知ることから、そのオプションは不可能です。プリミティブクラスは、他のすべてのプリミティブ、Long、char、バイトなどの列挙型のみを保持します。JavaParserで新しいコンパイル単位に文字列フィールドを追加する

私に何か不足していますか?または、開発者にStringオプションについて忘れてもらえますか?

がRiduidelsの答えに 感謝を解決し、私はいわば、コードをクラックするために管理:)事は新しいClassOrInterfaceTypeを作成することでしたし、十分な文字列、簡単なそれを呼び出します。 JavaParserの背後にいる人々は、他のプリミティブと同じようにStringの列挙型を追加する必要があります。作業コード:

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; 
} 

ありがとうRiduidel!

答えて

1

JavaParserタイプの階層は、Javaソースファイルにあるものに本当に近いです。また、ソースファイルでは、文字列を直接ファイルに格納するのではなく、ファイル内で宣言されたクラスに格納します。 (ただし

この

はかなりうまく

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; 
    } 
} 

になるためにaddaptedできるコンテンツJavaParserセクションCreating a CompilationUnit from scratch、に記載されており、これはGeneratedClassGeneratedClassという名前の単純なフィールドを含むという名前のパッケージjava.parser.testでクラスを含むファイルを作成します。私はその正確性を保証するために上記のコードをコンパイルしなかった)。

+0

これが機能する場合は、コードを私と共有してください。私はとても失われていると感じます。 – SwissArmyKnife

+0

私の質問が更新されました。あなたはほぼ100%感謝しました。 – SwissArmyKnife

関連する問題