这个简单的EMF模型出了什么问题?

时间:2013-03-08 13:52:50

标签: java model eclipse-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 个答案:

答案 0 :(得分:1)

对立关系必须是 1:1 关系。据我所知,它是不可能有两个引用指向相同的相反参考。使用Ecore编辑器而不是带注释的Java类创建EMF模型时,这一点更加清晰。

在您的情况下,您可以拥有一个List<ContainedObject> containedObjects并创建两个额外的getter方法getVariables()getCategories(),从该公共列表中过滤相应的元素,或者您可以创建两个{ {1}}引用,一个用于container,另一个用于categories

或者,您可以删除明确的variables引用,只使用container的隐式eContainer / eContents功能。