这个型号出了什么问题:
/** @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
这个型号有什么问题?
答案 0 :(得分:1)
对立关系必须是 1:1 关系。据我所知,它是不可能有两个引用指向相同的相反参考。使用Ecore编辑器而不是带注释的Java类创建EMF模型时,这一点更加清晰。
在您的情况下,您可以拥有一个List<ContainedObject> containedObjects
并创建两个额外的getter方法getVariables()
和getCategories()
,从该公共列表中过滤相应的元素,或者您可以创建两个{ {1}}引用,一个用于container
,另一个用于categories
。
或者,您可以删除明确的variables
引用,只使用container
的隐式eContainer
/ eContents
功能。