列挙されたhashcodeはJVMにまたがって不安定である


問題:プロジェクトでPOJOにバージョン番号の属性を追加しようとしたが、時間的要因を考慮してこのオブジェクトのいくつかの属性のhashcodeをバージョン番号として選択し、それらの属性が変更されていない場合、このhashcodeは変更すべきではなく、逆に変更する.これらのプロパティでは、あいにく..いくつかは列挙タイプである.テストでは、同じJVMを使用してプログラムを呼び出し続けると、hashcodeは常に同じであるが、サーバを再起動して新しいJVMを開くと、対応するObjectの属性が変更されなくても、このhashcodeは変更されることが分かった.これが列挙hashcodeがJVMにまたがって不安定である.
調査によると、JDKでのEnum.classのhashcodeメソッドはfinalであり、親Objectを直接呼び出す.classのhashcodeメソッド

/**
     * Returns a hash code for this enum constant.
     *
     * @return a hash code for this enum constant.
     */
    public final int hashCode() { //       
        return super.hashCode();
    }

これにより、列挙hashcodeがメモリアドレスにリンクする不安定性が生じる可能性がある.Googleはこの質問をして、すでにoracleにバグを提出して上の方法をfinal修飾を取り除くように要求していますが、oracleは拒否しました.
個人の現在の解決方法は、列挙するname()メソッドを呼び出してそれをStringに変換することであり、Stringのhashcodeは安定である.
1つの記録