如何以编程方式将通用类型参数添加到属性?

How do I programmatically add an EGeneric Type Argument to an EAttribute?

如何以编程方式将 EGeneric 类型参数添加到 EAttribute? 我可以像这样创建 EAttribute:

EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
eAttribute.setName("myAttribute");
EDataType dataType = EcorePackage.eINSTANCE.getEEList();
// add here String to List as generic argument?
eAttribute.setEType(dataType);

但是对于该代码片段,未指定 EEList 的泛型类型参数。在 Eclipse 中,我会用 New Child > EGeneric Type Argument 修复它,然后将 EGeneric 类型参数的 EClassifier 设置为 EString。但是我怎样才能以编程方式做到这一点呢?

最后,属性应如下所示:

我花了一些时间,但我有一个解决方案:

EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
eAttribute.setName("myAttribute");
eAttribute.setEType(EcorePackage.eINSTANCE.getEEList());
// This is the interesting part:
EGenericType eGenericTypeArgument = ecoreFactory.createEGenericType(); // line 1
eGenericTypeArgument.setEClassifier(EcorePackage.eINSTANCE.getEString()); // line 2
eAttribute.getEGenericType().getETypeArguments().add(eTypeArgument); // line 3
  1. 行 1 中,从 EcoreFactory 创建了一个新的 EGenericType。那就是我们的 EGeneric 类型参数。
  2. 现在,在第 2 行,我们将 EGeneric Type Argument 的数据类型设置为 EString
  3. 在最后一步,在第 3 行,我们将 EGeneric 类型参数添加到 EAttributeEGenericType(不是 EType我们之前设置的)。

事后看来,我们不修改 EDataType 是有道理的,我们宁愿修改 EAttribute