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

时间:2012-07-18 14:06:00

标签: eclipse eclipse-emf

我想用Eclipse EMF创建一个包含ListString个对象的类。我看到Ecore有一个EList,但我无法更改列表的泛型类型。

知道怎么做吗?

2 个答案:

答案 0 :(得分:16)

如果您要生成的代码为EList<String>,请向EAttribute添加新的EClass,并为其提供EType EString,并将其“上限”属性设置为“-1”。

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

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

如果您想查看其他选项,请在org.eclipse.emf.common.util.AbstractEList<E>

上打开类型层次结构

答案 1 :(得分:6)

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

如果你想从.ecore文件生成Java代码,那么我在这里使用Eclipse Juno的EMF样本生成模型编辑器(右键单击.ecore文件)提供一个例子。

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

假设您在生成的Java类MyClass中需要这样的方法:

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

在Sample Ecore Model Editor中,您希望通过

实现How your method looks in the Ecore Editor
  • 向MyClass添加EOperation的“New Child”,将其命名为getListOfType
  • 将getListOfType添加到ETypeParameter的“New Child”,将其命名为T
  • 添加一个EGeneric Bound Type的“New Child”,你会看到“T extends?”而不是“T”
  • 单击箭头“T extends?”,单击“?”,在“属性”窗口中选择EClassifier和EString的下拉菜单,现在你会看到“T extends EString”

  • 将getListOfType添加为EGeneric Return Type的“New Child”

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

  • 将getListOfType添加为“EParameter”的“新孩子”

  • 在新创建的参数“null”的属性窗口中,选择Name作为“clazz”,选择EType作为“EJavaClass”
  • 在新“?”的属性窗口中(节点“clazz:EJavaClass”下面两级),选择EType参数为“T extends EString”,现在“clazz:EJavaClass”变为“clazz:EJavaClass”

现在您已准备好.ecore文件用于生成java类。

How your method looks in the Ecore Editor