我的模型包含一个名为结果的接口。我有多个实现上述接口的类。现在我想添加结果列表作为结果。我想要能够创造出这样的东西:
列表< ResultImplA >
,它
我尝试使用EMF泛型,它涵盖了1和2,但我无法在代码中创建它们。我只能将它用作专门处理泛型的其他类的超类,但我不想为所有结果创建额外的List类。DomainFactory只为我提供了ResultList<结果>的实现。
发布于 2016-06-23 15:27:39
我不太确定你想做什么。你想要一个类,它是EList和Result?从技术上讲,这是可能的,可以通过扩展BasicEList或实现EList类来实现:
class ResultImpl extends BasicEList<E> implements Result或
class ResultImpl extends MinimalEObjectImpl.Container implements EList<E>, Result但是这都是不可靠的,不管是哪种方式,您都需要自己实现大量的方法,并且可能会不断地崩溃EMF .
您可以做的是:让一个EClass说"ResultList“,它将您的Result作为超类,并在其中添加一个EReference (name =”EReference“,EType:Result,(上限:-1)。所以您可以生成一个类,它基本上是Results EObjects的包装器。
更进一步:要使您的ResultList‘行为’像一个列表,例如在循环中:
for(Result r : aResultList)您可以在您的java.lang.Iterable<Result>类中实现ResultList接口,并在您的ResultList类中创建您自己的自定义java.util.Iterator<Result>嵌套类,它直接为您提供EReference的元素:
例如嵌套的Iterator类(嵌套在ResultList类中):
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:
@Override
public Iterator<Result> iterator() {
return new ResultIterator();
}Update:如果您决定使用泛型EClass参数创建一个EType,并且希望创建该类的一个实例,那么您的factoryImpl中应该有这样的内容:
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public <T> ResultList<T> createResultList() {
ResultListImpl<T> resultList = new ResultListImpl<T>();
return resultList;
}所以你应该可以像这样使用:
ResultList<Result> someResultList = Yourfactory.eINSTANCE.createResultList();https://stackoverflow.com/questions/37968970
复制相似问题