gpt4 book ai didi

java - Java 对象(Eclipse EMF 资源和模型元素)的唯一且可复制的标识符

转载 作者:行者123 更新时间:2023-12-01 04:33:54 26 4
gpt4 key购买 nike

我一直在谷歌上搜索解决方案,并在 SOF 中阅读了很多问题/答案,但没有找到任何我可以使用的东西。

我的问题如下:我需要在不同的机器上唯一地标识 EMF 元素。最低级别的已知父类(super class)是 org.eclipse.emf.common.notify.Notifier,因为元素可能是资源和/或模型元素。

Id 应该可以在运行时在不同的机器上重现(我可能必须在客户端和服务器中计算仅具有对 Java 对象的引用的 ID)。我无法访问源代码,无法修改模型(文件),并且并非所有模型元素都有 uuid。

由于 ID 应该可以在不同的机器上重现,因此我无法使用 hashCode() (任何形式)。我考虑过使用 MD5 哈希值,但我不知道使用什么作为 MD5 哈希值的种子,这将使其在某种程度上唯一并且可重现同一时间。

我们将不胜感激所有帮助!

最佳答案

嗯,我找到了一个解决方案。我对 EObject 和资源使用不同的 ID:

  • 对于 EObjects,我获取它们的片段 URI(它们在包含资源中的路径),将其设为字符串,并将其用作 MD5 哈希值的种子。事实证明,fragmentURI().toString() 的结果与 EMF 生成的 UUID 惊人地相似。 :-)

  • 对于资源,我获取文件的内容(模型文件通常是 XMI/XML 文件)并计算这些文件的 MD5 哈希值。

这个解决方案有点繁重,特别是资源部分,但我通过最小化对 ID 生成算法的调用来弥补它,所以对我来说没问题。它是唯一的并且可以跨机器复制,这正是我所需要的。

希望这对将来的人有帮助。

关于java - Java 对象(Eclipse EMF 资源和模型元素)的唯一且可复制的标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17593963/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com