これはシリアライズが初めてなので、これは簡単な質問かもしれませんが、私のgoogle-fuは今日弱いです。既知のスーパークラスのランダムな派生クラスを非直列化する
public class Base implements Serializable {
// ...
}
public class Der1 extends Base {
// ...
}
public class Der2 extends Base {
// ...
}
アリスは、ランダムに、Der1
またはDer2
のいずれかのオブジェクトを作成し、それをファイルにシリアライズし、ボブに送信します:
では、次のクラスがあるとします。 BobはこのオブジェクトのクラスがBase
のサブクラスであることを知っていますが、どのクラス(Aliceと同じクラス定義を持っているか)はわかりません。 Bobはファイルをどのようにしてデシリアライズして、適切なサブクラスのインスタンスにすることができますか?彼女は、オブジェクトのクラスを格納するために、これを使用して、それをシリアル化し、ボブに送信し
public DerClass implements Serializable {
public Class<? extends Base> class;
}
:
私が最初に考えたアリスは、このようなクラスを定義するということでした。 BobはこのファイルからDerClass
オブジェクトを構成し、class
変数を読み取り、それを使用して適切なサブクラスをインスタンス化し、直列化オブジェクトをそのオブジェクトに読み込みます。これは効果がありますか?より良い方法がありますか?
私はいつも人々がこれらの「ランダムなクラス」を取得したのだろうと思います。実際の状況はどうですか?シリアライズされた書式には、それ自身を識別するための情報が含まれていなければなりません。 –
@suszterpatt:もしあなたがここでBobのコードを書いていれば、あなたの質問はより親切であると思います。 –