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

Yve*_*s_T 10 eclipse eclipse-emf

我想用Eclipse EMF创建一个包含Listwith String对象的类.我看到Ecore有一个,EList但我不能改变列表的泛型类型.

知道怎么做吗?

Max*_*ger 16

如果你想生成给你一个的代码,那么给EList<String>a添加一个新EAttributeEClass,给它EType EString,并将它的"Upper Bound"属性设置为'-1'.

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

EList<String> stringList = new BasicEList<String>();
Run Code Online (Sandbox Code Playgroud)

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


Cuo*_*yTo 7

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

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

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

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

<T extends String> EList<T> getListOfType(Class<T> T)
Run Code Online (Sandbox Code Playgroud)

在Sample Ecore Model Editor中,您希望实现您的方法在Ecore编辑器中外观

  • 向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的箭头,在Property窗口中选择EType参数的下拉菜单中的"T extends EString"

  • 添加到getListOfType"EParameter"的"新子"

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

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

您的方法在Ecore编辑器中的外观

  • 谢谢你的精彩教程.我有问题要遵循它,因为我没有在我的编辑器中启用泛型.为此,请转到Sample Ecore Editor - > Show Generics. (2认同)