我想要一个应该读取所有公共方法(包括超类)的方法,并且对于每个非null属性存储,它是hashCode。
private static String reflect(Object o) {
StringBuilder key = new StringBuilder();
try {
for (Method m : o.getClass().getMethods()) {
if (m.getName().startsWith("get") || m.getName().startsWith("is")) {
Object result = m.invoke(o, new Object[]{});
key.append(result != null ? result.hashCode() : "-");
}
}
} catch (Exception e) {
throw new RuntimeException(e);
}
return key.toString();
}
这段代码是正常的还是我忘记了与我的需求相关的重要内容?
我能看到的唯一明显的事情是,如果你使用哈希码来识别对象中的更改,你应该知道getMethods()返回的方法顺序"不在任何特定的顺序",所以不能保证它们会在另一个JVM中以相同的顺序返回,甚至从一个调用到另一个调用。