You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ECoreUtil.Copier复制的对象哈希码与原对象不同的原因

为什么ECoreUtil.Copier复制的EObject副本哈希码和原对象不同?

这其实是完全正常的情况,咱们来拆解背后的几个核心原因:

  • 默认哈希码基于对象身份而非内容:EMF中的EObject默认继承了java.lang.Object的hashCode()实现,这个实现是根据对象在内存中的地址(也就是对象的唯一身份)来生成哈希码的。ECoreUtil.Copier创建的是一个全新的实例,它在堆内存里有自己独立的地址,哪怕属性和原对象完全一致,身份不同哈希码自然也不一样。

  • Copier的设计目标是值复制:ECoreUtil.Copier的核心作用是生成对象的值副本——把原对象的所有属性、关联关系完整复制到新对象中,但它从一开始就没打算让副本和原对象共享身份。如果哈希码都一样了,那本质上就不是两个独立的对象了,这显然和“复制”的需求矛盾。

  • 若需基于内容的哈希码,需自定义实现:如果你希望内容一致的原对象和副本拥有相同的哈希码,那需要在你的EClass对应的Java类里重写hashCode()方法,让它基于对象的属性值来计算。你可以直接复用EMF提供的EcoreUtil.hashCode(EObject)工具方法,它会遍历对象的所有属性生成基于内容的哈希码;或者自己实现逻辑,确保所有关键属性都被纳入哈希计算。

内容的提问来源于stack exchange,提问作者Manoj Keshavaprakash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:21:49