如何以编程方式将{EGeneric Type Argument}添加到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 Type Argument的EClassifier
设置为EString
。但是我怎么能以编程方式做到这一点?
答案 0 :(得分:2)
我花了一些时间,但我有一个解决方案:
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
EGenericType
创建新的EcoreFactory
。这是我们的EGeneric Type Argument。 EString
。 EGenericType
的{{1}}(不是我们之前设置的EAttribute
)。事后看来,我们不修改EType
是有道理的,我们宁愿修改EDataType
。