私は、一般的に抽象クラスをJavaでシリアライズ可能にするべきではないことを読んでいます。サブクラスは直列化可能である必要があります(例えば、抽象クラスにフィールドがある場合はカスタム読み込み、書き込みメソッドが必要です)。なぜJavaで抽象クラスを直列化しないのですか?
この理由は何ですか?なぜそれは悪いデザインと見なされますか?
Update1:私はいくつかのフィールドと3つのサブクラスを持つ抽象クラスを持っています。今のところ、私は次のアプローチを使用しています。
私はすべてのサブクラスをカスタムの読み込み、書き込みメソッドでシリアライズ可能にしました。抽象クラスで私は以下のメソッドを持っています。カスタム読み取りで
void writeFields(ObjectOutputStream out)throws IOException { .... }
void readFields(ObjectInputStream in) throws IOException, ClassNotFoundException{ ... }
、私は抽象クラスのフィールドをシリアル化(デ)にこれらのメソッドを呼び出して、サブクラスのメソッドを記述します。このアプローチは正しいですか?それとももっと良いアプローチがありますか?
更新2:私はTomのアドバイスを受けて、抽象クラスSerializableを作成しました。 (私はすべてのサブクラスをシリアライズ可能にしたいと思います。抽象クラスにデータがあります)これは脇にありますが、使用している記事を完成させるだけです。reflection to change final fields as advised by Jeremy Manson.
この質問はすべてのオブジェクト指向言語に適用されます。 –