6

是否可以让 EMF 对象实现hashCodeequals?我希望能够将模型对象用作HashMap.

4

4 回答 4

9

EObject 的javadoc对此很清楚。一个 EObject 可能没有专门化hashCodeequals. 但是,只要您了解 和 的标识语义,就可以在地图中使用Object#equals(..)它们#hashCode

于 2011-06-06T13:01:54.677 回答
2

我绝不是 EMF 专家,但您可以为 EObject 创建一个包装器对象,并根据您感兴趣的 EObject 的属性在包装器中实现equals和方法,然后使用该包装器作为键。hashCode这将迫使您在搜索地图时始终实例化包装器对象,但取决于可能不太可恨的使用模式。

请注意,在映射中使用可变对象作为键是很棘手的。如果对象在被用作键后发生变异,导致哈希码发生变化,那么以后可能很难再次找到该键。

于 2011-10-12T18:17:46.813 回答
1

EcoreUtil.equals()如果方法背后的算法适合您的用例,您可以使用。

于 2012-01-04T13:59:06.073 回答
-1

或者您可以为每个类实现(生成) equals/hashCode方法。您必须在方法标题上方EMF-*Impl插入注释。@generated not

于 2012-08-25T11:58:15.357 回答