根据EMF FAQ,可以在EMF中创建地图:
EMap基本上是java.util.Map $ Entry实例的List。 因此,要创建地图,您需要先为地图条目建模 遵循以下步骤:
- 创建一个名为[Type1]的EClass到[Type2] Map,其中[Type1]表示键的类型,[Type2]表示值的类型。
- 将新创建的EClass的Instance Class Name属性设置为java.util.Map $ Entry。
- 创建名为" key"的EAttribute或EReference;并为其设置EDataType或EClass。
- 创建名为"值"的EAttribute或EReference;并为其设置EDataType或EClass。
醇>现在,当您在某处使用此地图条目创建EReference时 class作为它的EClass,EMF代码生成器将检测这个特殊的 大小写并为您生成一个正确类型的EMap getter / setter 一个普通的EList getter / setter。
我可以在Xcore型号中使用它吗?我不确定步骤#2在Xcore中是否可行,或者它是否支持地图。
答案 0 :(得分:6)
对我而言,这是有效的。
DataPoints.xcore
:
...
class KeyValuePair wraps java.util.Map$Entry {
String key
String value
}
class KeyValueList {
contains KeyValuePair[] entries
}
上述结果为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;
}