用于根据Object - Java中的所有公共getter生成哈希的代码

时间:2013-01-31 17:04:41

标签: java reflection

我的方法应该读取所​​有公共方法(包括超类),并为每个非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();
}

此代码是否正常或我忘记了与我的需求相关的重要事项?

1 个答案:

答案 0 :(得分:4)

我能看到的唯一显而易见的事情是,如果您使用哈希码来识别对象中的更改,您应该知道order of methods returned by getMethods()“不是以任何特定顺序”,因此无法保证他们将在另一个JVM中以相同的顺序返回,甚至从呼叫到呼叫返回。