Eclipse 使用EMF对象作为键
是否可以让EMF对象实现Eclipse 使用EMF对象作为键,eclipse,eclipse-emf,Eclipse,Eclipse Emf,是否可以让EMF对象实现hashCode和equals?我希望能够使用模型对象作为HashMap中的键,而EObject对此很清楚。EObject不能专门化哈希代码或等于。但是,只要知道Object#equals(..)的标识语义,就可以在映射中使用它们和#hashCode我绝不是EMF专家,但是您可以为EOObject创建一个包装器对象,并根据您感兴趣的EOObject的属性在包装器中实现equals和hashCode方法,然后将该包装器用作键。这将迫使您在搜索地图时始终实例化包装器对象,但这
hashCode
和equals
?我希望能够使用模型对象作为HashMap
中的键,而EObject对此很清楚。EObject不能专门化哈希代码
或等于
。但是,只要知道Object#equals(..)的标识语义,就可以在映射中使用它们
和#hashCode
我绝不是EMF专家,但是您可以为EOObject创建一个包装器对象,并根据您感兴趣的EOObject的属性在包装器中实现equals
和hashCode
方法,然后将该包装器用作键。这将迫使您在搜索地图时始终实例化包装器对象,但这取决于可能不太令人讨厌的使用模式
请注意,在地图中使用可变对象作为关键点是很棘手的。如果对象在用作密钥后发生了变异,导致散列码发生变化,那么以后可能很难再次找到密钥 如果方法背后的算法适合您的用例,您可以使用
EcoreUtil.equals()
。或者您可以为每个EMF-*Impl
类实现(生成)equals
/hashCode
方法。您必须在方法标题上方插入一条@生成的not
注释。好吧,我不能。我需要不同的对象来比较基于某些属性的值的相等。为什么需要这样?如果您想拥有值对象的语义,应该使用EDataTypes。