首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EMF通用表

EMF通用表
EN

Stack Overflow用户
提问于 2016-06-22 13:06:34
回答 1查看 211关注 0票数 1

我的模型包含一个名为结果的接口。我有多个实现上述接口的类。现在我想添加结果列表作为结果。我想要能够创造出这样的东西:

列表< ResultImplA >

,它

  • 只能包含选定的结果类型。
  • 实现我的结果接口,
  • 是一个EObject (可以包含在Elist等)
  • 可以通过EMF (DomainFactory.eINSTANCE.create.())生成具体实例

我尝试使用EMF泛型,它涵盖了1和2,但我无法在代码中创建它们。我只能将它用作专门处理泛型的其他类的超类,但我不想为所有结果创建额外的List类。DomainFactory只为我提供了ResultList<结果>的实现。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-23 15:27:39

我不太确定你想做什么。你想要一个类,它是EListResult?从技术上讲,这是可能的,可以通过扩展BasicEList或实现EList类来实现:

代码语言:javascript
复制
class ResultImpl extends BasicEList<E> implements Result

代码语言:javascript
复制
class ResultImpl extends MinimalEObjectImpl.Container implements EList<E>, Result

但是这都是不可靠的,不管是哪种方式,您都需要自己实现大量的方法,并且可能会不断地崩溃EMF .

您可以做的是:让一个EClass说"ResultList“,它将您的Result作为超类,并在其中添加一个EReference (name =”EReference“,EType:Result,(上限:-1)。所以您可以生成一个类,它基本上是Results EObjects的包装器。

更进一步:要使您的ResultList‘行为’像一个列表,例如在循环中:

代码语言:javascript
复制
for(Result r : aResultList)

您可以在您的java.lang.Iterable<Result>类中实现ResultList接口,并在您的ResultList类中创建您自己的自定义java.util.Iterator<Result>嵌套类,它直接为您提供EReference的元素:

例如嵌套的Iterator类(嵌套在ResultList类中):

代码语言:javascript
复制
private class ResultIterator implements Iterator<Result> {
        private int index = 0;

        @Override
        public boolean hasNext() {
            return index < size;
        }

        @Override
        public Result next() {
            return results.get(index++);
        }
    }

由于您已经实现了Iterable接口,所以需要实现public Iterator<Result> iterator()方法,该方法只返回自定义Iterator:

代码语言:javascript
复制
@Override
public Iterator<Result> iterator() {
    return new ResultIterator();
}

Update:如果您决定使用泛型EClass参数创建一个EType,并且希望创建该类的一个实例,那么您的factoryImpl中应该有这样的内容:

代码语言:javascript
复制
/**
 * <!-- begin-user-doc -->
 * <!-- end-user-doc -->
* @generated
*/
public <T> ResultList<T> createResultList() {
    ResultListImpl<T> resultList = new ResultListImpl<T>();
return resultList;
}

所以你应该可以像这样使用:

代码语言:javascript
复制
ResultList<Result> someResultList = Yourfactory.eINSTANCE.createResultList();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37968970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档