有人可以建议任何为Java类生成唯一Id优选整数的方法。我需要让每个Java类都有某种唯一的Id,它将通过序列化策略编写,用于返回分布式设置中的同一个类。
答案 0 :(得分:2)
看一下UUID课程。它具有toString()功能。您可以获取该值的哈希值。
答案 1 :(得分:0)
虽然不是整数,但另一种方法是使用SecureRandom:
new BigInteger(130, new SecureRandom()).toString(32)
返回一个类似“61iook8njttgnmp06aku56gmtc”的字符串
请注意,如果可能的话,最好创建一个SecureRandom并在生成唯一ID时重复使用它。
编辑:抱歉,暂无法发表评论,但我看到您在UUID答案中添加了评论 - 这也是解决原始问题的绝佳方法。但是,现在您需要一个对象的“唯一键”。你真的需要为你的对象想出一个正确的hashCode()方法。你需要回答一个版本的对象与另一个版本之间的区别 - 一个你可以调用hashCode()的字符串吗?
答案 2 :(得分:0)
我确定你能得到你想要的东西。
让整个事情成为构建过程的自动化部分会很好,所以它只会发生#34;。
似乎Java类中唯一可用于表示唯一类的近乎恒定的信息是完整的包和类名称"规范路径"。但如果有人重新命名或改变包装,你就会搞砸了。
要获取分配一次且持久性的任何较短ID,将需要在应用程序启动时加载某种持久性注册表数据库,并且可用于将序列化相同类的所有应用程序。然后,您可以从中查找实际的运行时类,并将其分配给内部注册表。
如果以某种方式在首次创建没有指定ID的类时可以生成唯一ID,并且可以将注释或其他字段添加到相关类的源代码中,那将是很好的。 / p>