Java 如何将枚举常量字段添加到IType

Java 如何将枚举常量字段添加到IType,java,eclipse,enums,eclipse-jdt,Java,Eclipse,Enums,Eclipse Jdt,要将新的枚举常量添加到类型类型,值应该是什么 public void addEnumConstant(IType type, String value){ if(type.isEnum()){ type.createField(value, null, false, null); } } 编辑: 我想我太简短了,所以我添加了更多关于我的问题的信息 我正在使用JavaModel框架,希望向IType对象添加一个枚举常量。我希望避免显式使用AST 通过以下代码,可以

要将新的枚举常量添加到类型
类型
,值应该是什么

public void addEnumConstant(IType type, String value){
    if(type.isEnum()){
        type.createField(value, null, false, null);
    }
}
编辑: 我想我太简短了,所以我添加了更多关于我的问题的信息

我正在使用JavaModel框架,希望向IType对象添加一个枚举常量。我希望避免显式使用AST

通过以下代码,可以轻松地向类型添加新方法:

IType type = [...];
type.createMethod("public void method(){}", null, false, null);
我还可以添加一个变量字段:

type.createField("public int var", null, false, null);

但我不知道如何添加enum常量。

IType
提供了一种使用给定内容创建类型的方法。这也可以用于枚举

createType(String value, IJavaElement sibling, boolean force, IProgressMonitor monitor)

更新

如果您有权访问compliation单元,则可以在IType中创建EnumConstantDeclaration AST节点

ICompilationUnit iCUnit = type.getCompilationUnit()

// convert iCUnit to CompilationUnit

EnumConstantDeclaration constant = compilationUnit.getAST().newEnumConstantDeclaration();
constant.setName(parse.getAST().newSimpleName("constant name"));
将ICompilationUnit转换为CompilationUnit的代码:

//Get the compilation unit for traversing AST
final ASTParser parser = ASTParser.newParser(AST.JLS4);
parser.setSource(javaElement.getCompilationUnit());
parser.setResolveBindings(true);

final CompilationUnit compilationUnit = (CompilationUnit) parser.createAST(null);

它是什么类型的?是enum吗?我猜您正在使用EclipseJDT抽象语法树代码尝试向类型添加一个新字段。你的得票率下降是因为你没有把这一点说得足够清楚,人们也不明白你在做什么。org.eclipse.jdt.core.itype我想在现有的枚举声明中添加一个常量,所以我不能使用IPackageFragment的createType,而是在更新后使用iType的createField:这是我最终要做的事情,如果没有别的办法。关键是它不像您的代码片段中那样简单。首先,我需要将ICompilationUnit转换为CompilationUnit,然后使用TextEdit应用更改。我在大约20行代码中完成了这项工作,因此在一行中使用createField()的替代方案非常诱人,特别是我没有在代码中的任何其他地方显式使用AST。我同意
createField()
是一个非常优雅的选项,并且只使用JDT。但不确定是否还有其他选择。我只是在遍历一个枚举,发现
IType.getFields()
给出了枚举常量列表,这可能会推断枚举常量也是一个IField。您是否尝试过使用
createField()
方法创建常量?不幸的是,答案没有描述如何将AST转换回Java源代码。这似乎是可能的(),但看起来相当复杂。