如何以编程方式向EAttribute添加EGeneric类型参数?
我可以这样创建一个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。但是我该如何以编程方式做到这一点?

最后,该属性应如下所示:
java - 如何以编程方式向属性添加泛型类型参数?-LMLPHP

最佳答案

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

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行中,从EGenericType创建一个新的EcoreFactory。这就是我们的EGeneric类型参数。
现在,在第2行中,将EGeneric Type Argument的数据类型设置为EString
在第3行的最后一步中,我们将EGeneric Type Argument添加到EGenericTypeEAttribute(不是我们先前设置的EType)。


事后看来,我们不修改EDataType而是修改EAttribute是有意义的。

关于java - 如何以编程方式向属性添加泛型类型参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41444023/

10-11 20:43