使用EMF对象作为键

7

是否有可能让EMF对象实现hashCodeequals?我想把模型对象作为HashMap中的键使用。

4个回答

10

在IT技术方面,EObject的javadoc非常清晰明了。一个EObject可能不会特化hashCodeequals。然而,只要你了解Object#equals(..)#hashCode的标识语义,就可以在映射中使用它们。


抱歉,我不能这样做。我需要使用不同的 EObjects 来比较相等,基于某些属性上的值。 - JesperE
2
为什么你需要那个?如果你想要值对象的语义,你应该使用EDataTypes。 - Sebastian Zarnekow

2

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


2
我并不是一个 EMF 专家,但你可以为 EObject 创建一个包装对象,并实现在该包装对象中基于你感兴趣的 EObject 属性的 equalshashCode 方法,然后将该包装对象用作键。这将强制在搜索映射时始终实例化包装对象,但根据使用模式,可能不会太麻烦。
请注意,在 map 中使用可变对象作为键很棘手。如果该对象在用作键之后被改变,以致哈希码发生变化,则可能难以再次找到键。

-1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接