[英]EMF generic List
我的模型包含一個名為Result的接口。 我有多個實現上述接口的類。 現在我想將結果列表添加為結果。 我希望能夠像這樣創建某事:
列表<ResultImplA>
, 哪一個
我嘗試使用涵蓋1和2的EMF泛型,但是無法在代碼中創建它們。 我只能將其用作指定泛型的其他類的超類,但我不想為所有結果創建其他List類。 DomainFactory僅向我提供ResultList <Result>的實現。
我不太確定您要完成什么。 您想要一個類,它是一個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 =“ results”,EType: Result
,(upperbound:-1)。因此,您可以生成一個Class這基本上是Results
EObject的包裝器。
此外:為了使您的ResultList
像列表一樣“表現”,例如在循環中:
for(Result r : aResultList)
你可以實現java.lang.Iterable<Result>
接口在ResultList
類,並創建自己的自定義java.util.Iterator<Result>
在嵌套類ResultList
類,它為您提供了直接的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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.