-1

すべてのパブリックメソッド(スーパークラスを含む)を読み取る必要があるメソッドであり、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();
}

このコードは大丈夫ですか、それとも自分のニーズに関連して重要なことを忘れていますか?

4

1 に答える 1

4

私が見ることができる唯一の明白なことは、オブジェクトの変更を識別するためにハッシュコードを使用している場合、getMethods()によって返されるメソッドの順序が「特定の順序ではない」ことを知っている必要があることです。したがって、保証はありません。それらは別のJVMで同じ順序で返されるか、呼び出しごとに返されます。

于 2013-01-31T17:09:18.460 に答える