0

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

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

個人的には、クラスで行われるのは算術だけなので、その理由はわかりません。

4

2 に答える 2

2

へのコメントからserialVersionUID、著者は連載を考慮したくなかったようです。追加transientすると、一部のコンパイラ/IDE 警告が抑制された可能性があります。

于 2009-12-17T12:35:25.173 に答える
-1

ほとんどの場合、クラスのすべての非静的フィールドを作成する理由は、クラスが とのバイナリ互換性を維持するtransientためであり、そこから拡張されました。MTRandomjava.util.Random

したがって、理論的には、MTRandomインスタンスをシリアル化し、Randomインスタンスとして逆シリアル化すれば、すべてが機能します。

これらのフィールドが ではない場合transient、それらはシリアル化され、互換性がなくなります。

ただし、私が知る限り、トランジェントを削除しても問題は発生しません。

于 2009-12-17T00:16:55.987 に答える