1

効果的な Java のシリアライゼーションの章から:

逆シリアル化されるオブジェクトのクラスが適切な宣言で readResolve メソッドを定義する場合、このメソッドは、逆シリアル化された後に新しく作成されたオブジェクトで呼び出されます。

有効な Java で提供されている例は次のとおりです。Javadocが正しい形式であると言ってthrowsいる部分が欠落しているようです。ANY-ACCESS-MODIFIER Object readResolve() throws ObjectStreamException;

 // readResolve for instance control - you can do better!
        private Object readResolve () {
            // Return the one true Elvis and let the garbage collector
            // take care of the Elvis impersonator.
            return INSTANCE;
        }

ここでの適切な宣言とはどういう意味ですか? 宣言が適切でない場合でも、クラスはコンパイルされますか? 私はその文が少し混乱していると感じています。

4

2 に答える 2

5

のjavadocからSerializable

そのインスタンスがストリームから読み取られるときに置換を指定する必要があるクラスは、この特別なメソッドを正確なシグネチャで実装する必要があります。

ANY-ACCESS-MODIFIER オブジェクト readResolve() は ObjectStreamException をスローします。

つまりproper declaration、メソッドには上記と同じ宣言が必要です。

この動作が存在する理由は

Serializable は、その存在に基づいてアクションを実行できる JRE/JVM へのマーカーとして機能します。

ただし、独自に宣言された抽象メソッドはありません。

于 2013-09-08T17:38:43.223 に答える
2

適切な宣言とは、メソッドに次の署名が必要であることを意味します。

Object readResolve() throws ObjectStreamException;

逆シリアル化中、オブジェクト T が正常に逆シリアル化された後、オブジェクト T に上記のように宣言されたメソッド readResolve() が含まれている場合 (もちろん、リフレクションを介して)、自動的に呼び出されます。このチュートリアルまたは公式ドキュメント
を 見てください

于 2013-09-08T17:40:53.070 に答える