gpt4 book ai didi

java - 使用 JavaParser 将字符串字段添加到新的compilationUnit

转载 作者:行者123 更新时间:2023-12-01 09:35:38 27 4
gpt4 key购买 nike

这可能是一个愚蠢的问题,但我想实现主题所说的内容。我想在新的compilationUnit 中向新声明的classOrInterface 对象添加一个新的String 字段。但从我从源文件中可以看出,这个选项是不可能的。 PrimitiveClass 仅保存所有其他原语的枚举,Long、char、bytes 等。

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

已解决感谢 Riduidels 的回答,我设法破解了代码,可以这么说:) 事情是创建一个新的 ClassOrInterfaceType 并将其命名为 String,足够简单。不过,我必须说,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!

最佳答案

嗯,这很正常: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 中名为 GenerateClass 的类,其中包含一个名为 GenerateClass 的简单字段(尽管我没有编译上面的代码以确保其正确性)。

关于java - 使用 JavaParser 将字符串字段添加到新的compilationUnit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38971010/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com