设置EMF EObject的父对象



考虑两个eobject,它们都是通过某个工厂方法创建的

EObject parent = instantiateAParent();
EObject child = instantiateAChild();

我想让child的父结点是parent。在不依赖于childparent的确切类型的情况下,有可能做到这一点吗?如果是,怎么做?

这是可能的。你需要做的是:

  • 检索父类的类型(在Ecore意义上)(parent. eclass ())
  • 查找isContainment为true的所有引用(eClass.getEAllContainments())
  • 在这些包含引用中,您希望找到至少一个类型与子类型兼容的引用(erreference . getereferencetype ().isInstance(child))
  • 由于此时可能有多个包含引用,因此可以使用任何算法来选择一个(可能询问用户等)
  • 设置您选择的引用(父引用)的值。eSet (eReference、儿童))。请注意,如果您选择的包含引用是单值的,这可能会对您的模型产生重大影响。

最新更新