2016-12-29 36 views
5

定义地图按照EMF FAQ,有可能在EMF来创建地图:如何Xcore

的EMAP基本上是java.util.Map $入门实例的列表。 因此创造您需要首先你映射条目由 以下步骤模拟一个地图:

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

现在,当您创建某处一个的EReference使用此映射项 类作为其的EClass,EMF代码生成器会检测到这种特殊 情况,并为你生成一个类型正确EMAP的getter/setter,而不是 正常的EList getter/setter。

我可以在Xcore型号上使用吗?我不确定第2步在Xcore中是否可行,或者它是否支持地图。

回答

4

对我来说这个工程。

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