を実装するクラスがあり、タイプがのロックオブジェクトをSerializable
介してこのクラスの不変条件を保護します。それを一時的にしても大丈夫ですか、それとも望ましくない副作用がありますか?Object
コード:
class MyClass implements Serializable{
private final transient lock = new Object();
....
}
を実装するクラスがあり、タイプがのロックオブジェクトをSerializable
介してこのクラスの不変条件を保護します。それを一時的にしても大丈夫ですか、それとも望ましくない副作用がありますか?Object
コード:
class MyClass implements Serializable{
private final transient lock = new Object();
....
}
代わりに、空の配列(偶数)を使用する必要がありますnew Object[0]
。空の配列はシリアル化可能ですが、new Object()
そうではありません。
ただ行う:
private final Object lock = new Object[0];
自動(逆)シリアル化は期待どおりに機能し、ロックが再作成されます。よりも少し多くのメモリnew Object()
が必要になる場合がありますが、無視できるはずであり、シリアル化されたスペースも数バイト増加します。
ただし、カスタムシリアル化を避けたい場合は、間違いなく最も簡単なソリューションです。
同期するものがあるように、逆シリアル化時にオブジェクトを再作成する限り、これは問題ありません。
これが面倒な価値があるかどうかを決めるのはあなた次第です。