4

クラスにいる場合、クラス内のすべてのオブジェクトSerializableに追加する必要がありますか?Serializable

例えば、

public class User implements Serializable{

private List<Role> role;
private Task task;
}

とにも追加Serializableする必要がありますか?RoleTask

public class Task implements Serializable{
    // ...
}

public class Role implements Serializable{
    // ...
}
4

5 に答える 5

6

そうです; クラスTaskRoleが でない場合、 のインスタンスをシリアル化しようとするとSerializableが得られます。java.io.NotSerializableExceptionUser

もちろん、他の非プリミティブで非一時的なフィールドを含む場合、それらもそうでなければなりTaskません。RoleSerializable

于 2012-10-22T11:24:19.203 に答える
3

これが最も簡単なオプションです。

もう 1 つのオプションは、これらのフィールドを tranisent にし、writeObject と readObject を「オーバーライド」して、これらのクラスに独自のシリアライゼーションを実装することです。これが余分な努力をする価値があるとは考えにくいです。

ところで:ネストされたクラスがある場合、外側のクラスはシリアライズ可能である必要があり、ネストされたクラスは、使用しなくても暗黙的にそれへの参照を持っています。このような理由から、static可能な限りネストされたクラスを作成することをお勧めします。

于 2012-10-22T11:25:03.243 に答える
1

短い答え:はい。シリアライズ可能なクラス内の各オブジェクトは、それ自体でシリアライズ可能でなければなりません。そうしないと、すべてのプロパティを復元できません。

さらに、このオブジェクトをシリアライズしようとすると例外が発生します。

于 2012-10-22T11:24:43.133 に答える
1

シリアル化 可能 はい理由:

Classes that do not implement this interface will not have any of their state
serialized or deserialized. All subtypes of a serializable class are themselves 
serializable. The serialization interface has no methods or fields and serves 
only to identify the semantics of being serializable.

Serializable を実装するクラスのオブジェクトをシリアライズしようとしたときに、そのオブジェクトに Serializable でないクラスへの参照が含まれている場合、NotSerializableException実行時に がスローされます。

于 2012-10-22T11:25:02.937 に答える
1

ドキュメントから

このインターフェイスを実装しないクラスは、状態がシリアライズまたはデシリアライズされません。

あ、はい。

読んでください

于 2012-10-22T11:27:00.297 に答える