0

を実装するクラスがあり、タイプがのロックオブジェクトをSerializable介してこのクラスの不変条件を保護します。それを一時的にしても大丈夫ですか、それとも望ましくない副作用がありますか?Object

コード:

class MyClass implements Serializable{

 private final transient lock = new Object();
  ....
}
4

2 に答える 2

8

代わりに、空の配列(偶数)を使用する必要がありますnew Object[0]。空の配列はシリアル化可能ですが、new Object()そうではありません。

ただ行う:

private final Object lock = new Object[0];

自動(逆)シリアル化は期待どおりに機能し、ロックが再作成されます。よりも少し多くのメモリnew Object()が必要になる場合がありますが、無視できるはずであり、シリアル化されたスペースも数バイト増加します。

ただし、カスタムシリアル化を避けたい場合は、間違いなく最も簡単なソリューションです。

于 2013-11-15T20:34:06.443 に答える
2

同期するものがあるように、逆シリアル化時にオブジェクトを再作成する限り、これは問題ありません。

また、おそらく修飾子を削除するfinal必要があります。

これが面倒な価値があるかどうかを決めるのはあなた次第です。

于 2013-03-26T14:03:53.497 に答える