使用EMF对象作为键

时间:2011-06-06 12:59:44

标签: eclipse eclipse-emf

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

4 个答案:

答案 0 :(得分:8)

EObject的javadoc很清楚。 EObject可能不会专门化hashCodeequals。但是,只要您了解Object#equals(..)#hashCode的身份语义,就可以在地图中使用它们。

答案 1 :(得分:2)

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

请注意,将可变对象用作地图中的键非常棘手。如果在以哈希码改变的方式将对象用作密钥之后对象进行了改变,则稍后可能难以再次找到该密钥。

答案 2 :(得分:1)

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

答案 3 :(得分:-1)

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