6

根据EMF FAQ,可以在 EMF 中创建地图:

EMap 基本上是 java.util.Map$Entry 实例的列表。因此,要创建地图,您首先需要按照以下步骤对地图条目进行建模:

  1. 创建一个名为 [Type1]To[Type2]Map 的 EClass,其中 [Type1] 表示键的类型,[Type2] 表示值的类型。
  2. 将新创建的 EClass 的 Instance Class Name 属性设置为 java.util.Map$Entry。
  3. 创建一个名为“key”的 EAttribute 或 EReference,并为其设置 EDataType 或 EClass。
  4. 创建一个名为“value”的 EAttribute 或 EReference,并为其设置 EDataType 或 EClass。

现在,当您在某处创建使用此映射条目类作为其 EClass 的 EReference 时,EMF 代码生成器将检测这种特殊情况并为您生成正确类型的 EMap getter/setter,而不是普通的 EList getter/setter。

我可以将它与Xcore模型一起使用吗?我不确定第 2 步在 Xcore 中是否可行,或者它是否完全支持地图。

4

1 回答 1

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;
}
于 2017-03-23T09:27:23.223 回答