我需要编写一个函数,该函数返回一个字符串,该字符串对于对象的每个状态都应该是唯一的。
即。如果更改了任何实例变量,则此方法应返回另一个字符串,该字符串对于给定的对象实例变量集应该是唯一的。
类似地,我稍后会要求编写另一个表示类的唯一静态的方法。
请建议任何有效的方法来实现我的要求。
谢谢, 哈里什
答案 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)
一种相当天真的方法是将对象序列化到内存并获取内容的安全散列。相当低效但它适用于任何可序列化的对象。
究竟有什么要求?