Gab*_*yas 6 eclipse-emf emf xcore
根据EMF FAQ,可以在EMF中创建一个Map:
EMap基本上是java.util.Map $ Entry实例的List.因此,要创建Map,您需要首先按照以下步骤为地图条目建模:
- 创建一个名为[Type1]的EClass到[Type2] Map,其中[Type1]表示键的类型,[Type2]表示值的类型.
- 将新创建的EClass的Instance Class Name属性设置为java.util.Map $ Entry.
- 创建名为"key"的EAttribute或EReference,并为其设置EDataType或EClass.
- 创建一个名为"value"的EAttribute或EReference,并为其设置EDataType或EClass.
现在,当您使用此映射条目类作为其EClass创建一个EReference时,EMF代码生成器将检测此特殊情况并为您生成正确类型的EMap getter/setter,而不是正常的EList getter/setter.
我可以在Xcore模型中使用它吗?我不确定步骤#2在Xcore中是否可行,或者它是否支持地图.
对我来说,这有效。
DataPoints.xcore
:
...
class KeyValuePair wraps java.util.Map$Entry {
String key
String value
}
class KeyValueList {
contains KeyValuePair[] entries
}
Run Code Online (Sandbox Code Playgroud)
上面的结果导致一个KeyValueListImpl
类的getEntries
方法如下所示:
public EMap<String, String> getEntries() {
if (entries == null) {
entries = new EcoreEMap<String,String>(DataPointsPackage.Literals.KEY_VALUE_PAIR, KeyValuePairImpl.class, this, DataPointsPackage.KEY_VALUE_LIST__ENTRIES);
}
return entries;
}
Run Code Online (Sandbox Code Playgroud)