是否可以让EMF对象实现hashCode
和equals
?我希望能够将模型对象用作HashMap
中的键。
答案 0 :(得分:8)
EObject的javadoc很清楚。 EObject可能不会专门化hashCode
或equals
。但是,只要您了解Object#equals(..)
和#hashCode
的身份语义,就可以在地图中使用它们。
答案 1 :(得分:2)
我不是EMF专家,但您可以为EObject创建一个包装器对象,并根据您在EObject中的属性在包装器中实现equals
和hashCode
方法感兴趣,然后使用该包装器作为关键。这会强制您在搜索地图时始终实例化包装器对象,但这取决于可能不太讨厌的使用模式。
请注意,将可变对象用作地图中的键非常棘手。如果在以哈希码改变的方式将对象用作密钥之后对象进行了改变,则稍后可能难以再次找到该密钥。
答案 2 :(得分:1)
如果方法背后的算法适合您的用例,则可以使用EcoreUtil.equals()
。
答案 3 :(得分:-1)
或者您可以为每个equals
类实现(生成)hashCode
/ EMF-*Impl
方法。您必须在方法标题上方插入@generated not
条评论。