【问题标题】:How to define a map in Xcore如何在 Xcore 中定义地图
【发布时间】:2017-06-06 20:13:19
【问题描述】:

根据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。

现在,当您在某处创建使用此映射条目的 EReference 时 class 作为它的 EClass,EMF 代码生成器将检测到这个特殊的 case 并为您生成正确类型的 EMap getter/setter 一个普通的 EList getter/setter。

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

【问题讨论】:

    标签: eclipse-emf emf xcore


    【解决方案1】:

    对我来说这是可行的。

    DataPoints.xcore:

    ...
    class KeyValuePair wraps java.util.Map$Entry {
        String key
        String value
    }
    
    class KeyValueList {
        contains KeyValuePair[] entries
    }
    

    上面的结果是一个带有getEntries 方法的KeyValueListImpl 类,如下所示:

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 2015-09-11
      • 1970-01-01
      • 1970-01-01
      • 2013-04-04
      • 1970-01-01
      • 2017-01-21
      • 1970-01-01
      • 1970-01-01
      • 2015-10-10
      相关资源
      最近更新 更多