当比较通过从不同位置加载相同资源创建的2个EObject时,EcoreUtil.equals返回false

时间:2012-11-01 08:39:24

标签: eclipse-emf-ecore

我正在使用EcoreUtil.equals方法观察一种奇怪的行为。我正在使用资源的createResourceload方法加载2个XML文件,它们来自2个不同的位置(我在2个位置有相同的文件)完全相同。

ECoreUtil.equals为这两个EObjects返回false。当我调试EcoreUtil.equals代码时,由于对EClassEStructuralFeature的==检查,我发现它失败了。请注意,类和结构特征是相同的,但是,可以看到EClassEStructuralFeature的2个单独实例。 EcoreUtil.equals执行==检查功能和类,因此失败。

我无法理解为什么会为EClassEStructuralFeature创建2个实例。我确信2个XML文件没有区别。一个是另一个的副本。

生态模型中是否有任何设置可能是原因?我的XML文件中包含xmi:id属性。

我被这种行为困扰了。任何人都可以提供任何指示吗?

此致 阿尔提

1 个答案:

答案 0 :(得分:1)

最好在eclipse.tools.emf论坛上询问EMF。

你的问题中没有任何内容可以暗示为什么会有多个EPackage。它似乎建议你有一个使用动态Ecore模型的实例文件。是这样的吗?即使在这种情况下,如果您在同一资源集中加载资源,它们最终也应该共享一个模型。