質問

私はMersenne-Twisterの実装をで使用していました http://www.math.sci.hiroshima-u.ac.jp/~m-mat/versions/java/mtrandom.java デフォルトのドロップイン交換として java.util.Random クラス。ただし、4つのフィールド(int、boolean、2つのバイト[])がとしてマークされています transient. 。これは、カスタム機能を実装せずにこのクラスのオブジェクトをシリアル化できないことを意味します。

問題は、これらのフィールドが一時的にマークされている理由はありますか?そこに、ファイルからオブジェクトが読み取られたときに意味をなさない情報を保持するコードはありますか?削除しました transient フィールドからの修飾子とそれは正常に動作しているようですが、私はそれを集中的にテストしていないので、それが壊れる場合があるかもしれませんか?

個人的には、クラスで行われていることはすべて算術です。

役に立ちましたか?

解決

おそらく、作成の背後にある理由 全て クラスの非静的フィールドの transient そうだった MTRandom クラスはバイナリの互換性を維持します java.util.Random, 、そこから拡張されます。

したがって、理論的には、ANをシリアル化できます MTRandom インスタンス、そしてそれをasとしてより脱必要にします Random インスタンスとすべてが機能します。

それらのフィールドがそうでない場合 transient, 、その後、それらはシリアル化され、互換性がありません。

ただし、私が知る限り、トランジェントを除去することはあなたに問題を引き起こすことはありません。

他のヒント

コメントから serialVersionUID, 、著者はシリアル化を検討したくなかったようです。追加 transient いくつかのコンパイラ/IDE警告を抑制した可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top