9

技術的には、クラスが serializable を実装する必要がある理由を知っています。理由は、ObjectOutputStream の writeObject メソッドが、オブジェクトの状態を書き込む前に「シリアライズ可能なインスタンス」を内部的にチェックするためです。

しかし、私の質問は、その必要性は何ですか? writeObject メソッドは、オブジェクト (状態を書き込む必要がある) がシリアライズ可能かどうかに関係なく、オブジェクトの状態を単純に書き込むことができますか?

wikiに従って、クラスはこのインターフェースを実装して、非一時的なデータ メンバーを ObjectOutputStream に書き込むことができることを示します。しかし、ここでも問題は、フィールドが一時的かどうかを判断するためだけにクラスがシリアライズ可能を実装する必要がある理由です。serialiable を実装していないクラスでも、シリアル化する必要があります (transient とマークされたフィールドを除く)。

オブジェクトを(インターフェースで)シリアライズ可能としてマークしても、そのオブジェクトが魔法のようにシリアライズ可能になるわけではありません。それはずっとシリアライズ可能でした。システムが自分で見つけた可能性のある何かを表現しただけなので、本当の正当な理由はわかりません連載は今のやり方です。

クラスをシリアル化するためにクラスがシリアル化可能なマーカーインターフェイスを実装する必要があるのはなぜですか?

4

3 に答える 3

0

Serializable は、Cloneable と同様にマーカー インターフェイスと呼ばれます。いくつかのマーカー インターフェイス (メソッドの実装なし) を使用する場合、実行時またはコンパイル時に何かを追加またはチェックするように jvm またはコンパイラに指示する必要があります。

マーカー インターフェイスの定義:

「インターフェースは、実行時にクラスに特別な動作を提供できるようにクラスをマークするためにJavaインタープリターによってハンドルとして提供され、メソッド宣言を持たない場合、マーカーインターフェースと呼ばれます」.

また、マーカー インターフェイスは、コードを分類するための優れた方法です。コードを論理的に分割するマーカー インターフェイスを作成できます。独自のツールがある場合は、それらのクラスに対して前処理操作を実行できます。Spring や Struts などの API やフレームワークの開発に特に役立ちます。

マーカー インターフェイスは、コード カバレッジまたはコード レビュー ツールが、マーカー インターフェイスの指定された動作に基づいてバグを見つけるのにも役立ちます。

wiki http://en.wikipedia.org/wiki/Marker_Interface_patternのマーカー インターフェイスを参照してください。

于 2013-11-16T12:33:54.103 に答える