Eclipse 使用EMF对象作为键

Eclipse 使用EMF对象作为键,eclipse,eclipse-emf,Eclipse,Eclipse Emf,是否可以让EMF对象实现hashCode和equals?我希望能够使用模型对象作为HashMap中的键,而EObject对此很清楚。EObject不能专门化哈希代码或等于。但是,只要知道Object#equals(..)的标识语义,就可以在映射中使用它们和#hashCode我绝不是EMF专家,但是您可以为EOObject创建一个包装器对象,并根据您感兴趣的EOObject的属性在包装器中实现equals和hashCode方法,然后将该包装器用作键。这将迫使您在搜索地图时始终实例化包装器对象,但这

是否可以让EMF对象实现
hashCode
equals
?我希望能够使用模型对象作为
HashMap

中的键,而EObject对此很清楚。EObject不能专门化
哈希代码
等于
。但是,只要知道
Object#equals(..)的标识语义,就可以在映射中使用它们
#hashCode
我绝不是EMF专家,但是您可以为EOObject创建一个包装器对象,并根据您感兴趣的EOObject的属性在包装器中实现
equals
hashCode
方法,然后将该包装器用作键。这将迫使您在搜索地图时始终实例化包装器对象,但这取决于可能不太令人讨厌的使用模式


请注意,在地图中使用可变对象作为关键点是很棘手的。如果对象在用作密钥后发生了变异,导致散列码发生变化,那么以后可能很难再次找到密钥

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

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

好吧,我不能。我需要不同的对象来比较基于某些属性的值的相等。为什么需要这样?如果您想拥有值对象的语义,应该使用EDataTypes。