0

这个模型有什么问题:

/** @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

这个模型有什么问题?

4

1 回答 1

1

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

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

或者,您可以删除显式引用container并仅使用.eContainereContentsEObject

于 2013-03-08T14:10:07.217 回答