2013-03-08 25 views
0

有什麼不對這種模式:這個簡單的EMF模型有什麼問題?

/** @model abstract="true" */ 
public interface ContainedObject { 
    /** @model */ 
    public Container getContainer(); 
} 

/** @model abstract="true" */ 
public interface Container extends ContainedObject { } 

/* @model */ 
public interface Category extends Container { 
    /** @model containment="true" opposite="container" */ 
    public List<Category> getCategories(); 
    /** @model containment="true" opposite="container" */ 
    public List<Variable> getVariables(); 
} 

/** @model */ 
public interface Variable extends ContainedObject { } 

我想所包含的對象和它的容器之間的雙向性。 對於上述的java我收到以下錯誤消息時,我嘗試創建.genmodel:

the opposite 'container' already has attribute 'categories' of 'Category' 
as its opposite 

有什麼不對這種模式?

回答

1

對面關係必須是1:1的關係。據我所知,這是不可能有兩個參考指向相同的相反參考。使用Ecore編輯器而不是註釋的Java類創建EMF模型時,這更加清晰。

在你的情況,你既可以擁有一個List<ContainedObject> containedObjects並創建兩個額外的getter方法getVariables()getCategories(),從普通列表過濾的各個元素,或者你可以創建兩個container引用,一個用於categories,一個用於variables

或者,您可以刪除明確的container參考,並只使用EObject的隱含eContainer/eContents功能。

相關問題