如何以编程方式将通用类型参数添加到属性?
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 中,从
EcoreFactory
创建了一个新的 EGenericType
。那就是我们的 EGeneric 类型参数。
- 现在,在第 2 行,我们将 EGeneric Type Argument 的数据类型设置为
EString
。
- 在最后一步,在第 3 行,我们将 EGeneric 类型参数添加到
EAttribute
的 EGenericType
(不是 EType
我们之前设置的)。
事后看来,我们不修改 EDataType
是有道理的,我们宁愿修改 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 中,从
EcoreFactory
创建了一个新的EGenericType
。那就是我们的 EGeneric 类型参数。 - 现在,在第 2 行,我们将 EGeneric Type Argument 的数据类型设置为
EString
。 - 在最后一步,在第 3 行,我们将 EGeneric 类型参数添加到
EAttribute
的EGenericType
(不是EType
我们之前设置的)。
事后看来,我们不修改 EDataType
是有道理的,我们宁愿修改 EAttribute
。