如何使用Eclipse EMF创建通用列表?

13
我希望使用Eclipse EMF创建一个包含String对象的List的类。我发现Ecore有一个EList,但是不能更改列表的泛型类型。
你有什么想法吗?
2个回答

18

如果您想生成代码,得到一个EList<String>,那么可以向EClass添加一个新的EAttribute,将其EType设置为EString,并将其“Upper Bound”属性设置为“-1”。

如果您想以编程方式创建此类列表,例如,您可以使用BasicEList(例如org.eclipse.emf.common.util.BasicEList<E>):

EList<String> stringList = new BasicEList<String>();

如果您想查看其他选项,请在以下位置打开类型层次结构:org.eclipse.emf.common.util.AbstractEList<E>


8

不确定您的问题是否得到解答,以及您实际想要做什么。

如果您想从.ecore文件生成Java代码,则我在此提供一个示例,使用EMF的Eclipse Juno的样本Ecore模型编辑器(右键单击.ecore文件)。

也许这不是您直接想要的,但对其他人可能有帮助。

假设您想要在生成的Java类MyClass中拥有以下方法:

<T extends String> EList<T> getListOfType(Class<T> T)

在您的示例Ecore模型编辑器中,您希望通过在Ecore编辑器中如何查看您的方法来实现。
  • 在MyClass中添加一个名为getListOfType的EOperation的"新子项"
  • 在getListOfType中添加一个名为T的ETypeParameter的"新子项"
  • 在T中添加一个EGeneric Bound Type的"新子项",你会看到"T extends ?"而不是"T"
  • 点击"T extends ?"的箭头,点击"?",在"属性"窗口中从EClassifier的下拉菜单中选择EString,现在你会看到"T extends EString"

  • 在getListOfType中添加一个EGeneric Return Type的"新子项"

  • 点击返回类型的新创建的"?",在EClassifier的下拉菜单中选择EEList
  • 打开EEList的箭头,在属性窗口中从EType Parameter的下拉菜单中选择"T extends EString"

  • 在getListOfType中添加一个名为"EParameter"的"新子项"

  • 在新创建的参数"null"的属性窗口中,将Name选为"clazz",EType选为"EJavaClass"
  • 在新创建的"?"(位于节点"clazz:EJavaClass"的两个级别下)的属性窗口中,将EType Parameter选为"T extends EString",现在"clazz:EJavaClass"变成了"clazz:EJavaClass"
现在你的.ecore文件已准备好用于生成Java类。

How your method looks in the Ecore Editor


3
感谢您提供这份出色的教程。由于我没有在我的编辑器中启用generics,所以我有些难以跟进它。为了解决这个问题,请前往“Sample Ecore Editor”-->“Show Generics”以启用它。 - aphex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接