我不太确定您要完成什么。
您想要一个类,即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(名称=“结果”,EType:Result,(上界:- 1)给它。
因此,您可以生成一个基本上是 Results EObjects 的包装器的类。
进一步:让您的ResultList '表现' 像一个列表,例如在循环中:
for(Result r : aResultList)
您可以在您的ResultList 类中实现java.lang.Iterable<Result> 接口,并在您的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();
}
更新:
如果你决定创建一个带有通用 EType 参数的 EClass,并且你想创建这个类的一个实例,那么你的 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();