为每个java对象实例生成唯一字符串

时间:2011-11-02 05:02:02

标签: java

我需要编写一个函数,该函数返回一个字符串,该字符串对于对象的每个状态都应该是唯一的。

即。如果更改了任何实例变量,则此方法应返回另一个字符串,该字符串对于给定的对象实例变量集应该是唯一的。

类似地,我稍后会要求编写另一个表示类的唯一静态的方法。

请建议任何有效的方法来实现我的要求。

谢谢, 哈里什

4 个答案:

答案 0 :(得分:2)

我建议阅读有关Object.hashcode()的内容。建议hashcode generation的建议可用于您想要的目的。

答案 1 :(得分:1)

如果要跟踪给定对象状态(在其自己的边界内)的更改,可以通过一些编码或采用已实现的方法来实现。那是你在问什么?在您的情况下,使用递增序列号不合适的是什么?

如果您要保证给定类的所有现有实例之间的唯一性,这有点难。您可能需要单独区分对象,然后询问每个对象的唯一字符串表示。

答案 2 :(得分:0)

您可以使用Java反射查找班级中的所有字段并从那里开始工作:

public String tos() throws IllegalAccessException {
    StringBuilder b = new StringBuilder();
    for (Field f : getClass().getDeclaredFields()) {
        f.setAccessible(true);
        b.append(f.get(this));
    }
    return b.toString();
}

答案 3 :(得分:0)

一种相当天真的方法是将对象序列化到内存并获取内容的安全散列。相当低效但它适用于任何可序列化的对象。

究竟有什么要求?

  • 嵌套对象是否也会影响状态(或者这是否适用)?如果a.b.c更改会影响状态?
  • 具有相同内容的两个不同对象是否必须以相同的字符串结尾?