如何以编程方式向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
。但是我该如何以编程方式做到这一点?最后,该属性应如下所示:
最佳答案
我花了一些时间,但有一个解决方案:
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添加到
EGenericType
的EAttribute
(不是我们先前设置的EType
)。事后看来,我们不修改
EDataType
而是修改EAttribute
是有意义的。关于java - 如何以编程方式向属性添加泛型类型参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41444023/