如何在ecore和gen模型中设置默认值为null的枚举引用?

rou*_* ze 5 eclipse-emf eclipse-emf-ecore emf

我有一个Vehicle具有枚举属性的Eclass BreakType breakType.

BreakType 在同一Ecore模型中定义如下:

BreakType{
    DRUM(0), DISC(1), BLADE(2)
}
Run Code Online (Sandbox Code Playgroud)

我想将属性breakTypedefault设置为null.为此,我为breakTypeattribute-> 设置了以下属性

DefaultLiteralValue: // it's blank
Unsettable: True

Properties of BreakType enum
Default Value : DRUM=0 // this is shown in editor UI even If i remove it from xml.
Run Code Online (Sandbox Code Playgroud)

在生成gen-model和代码之后我得到的是

BreakType breakType = DRUM // attribute set with default value
Run Code Online (Sandbox Code Playgroud)

默认情况下,如何将其设置为null?

Jos*_*tez 1

我认为你不能。如果您无法通过属性提供默认值,defaultValueLiteralEMF 会自动选择适合属性类型的值。对于枚举类型,它是它定义的第一个文字值。

您始终可以自己修改生成的代码。或者也许您应该使用生成的方法来提供不可设置的功能:

void unsetAttribute();
boolean isSetAttribute();
Run Code Online (Sandbox Code Playgroud)

并检查未设置的状态而不是null值。

  • 嗯,看看我在 EMF 食谱中发现了什么。我还没有测试过它,但也许这就是您正在寻找的:[生成支持 null 的基于枚举的属性](http://wiki.eclipse.org/EMF/Recipes#Recipe:_Generate_enumeration-based_attributes_that_support_null) (4认同)