扔个三星炸死你2017-06-30 09:58:37
オブジェクトがシリアル化される場合、Java のデフォルトのシリアル化ルールに従って、オブジェクト内のすべてのメンバーがシリアル化される必要があります。つまり、これらのクラスは Serializable を実装する必要があります。
したがって、これを変更するには 2 つの方法があります。1 つは、Address で Serializable インターフェイスを実装することです。もう 1 つは、メンバーがシリアル化されないように transient
マークを Person のアドレス メンバーに追加することです。
typecho2017-06-30 09:58:37
address メンバーをシリアル化する必要がある場合、Address クラスも Serializable インターフェイスを実装する必要があります。
アドレス メンバーをシリアル化する必要がない場合は、transient キーワードを追加できます。その場合、アドレス メンバーはシリアル化されず、値は null になります。以下の通り:
もちろん、他の方法もあります:
たとえば、Externalizable インターフェースを実装し、readExternal(ObjectInput in) メソッドと writeExternal(ObjectOutput out) メソッドをオーバーライドします。
Externalizableinterface メソッドの代替実装もあり、あるいは writeObject(ObjectOutputStream obs) メソッドと readObject(ObjectInputStream ois) メソッドを追加して Serializableinterface を実装することもできます。
Serializable を実装する必要があるのか、または transient キーワード person を追加する必要がある理由をもう一度教えてください。 まず、
ObjectOutputStreamを使用してオブジェクトを処理せずに永続化することによってスローされる例外を見てみましょう
リーリー
ソースコードを見てください: リーリー このことから、書き込まれているオブジェクト型が String、Array、Enum、または Serializable の場合はシリアル化できますが、それ以外の場合は NotSerializableException がスローされることがわかります。また、オブジェクトをシリアル化する場合、現在のオブジェクト自体がシリアル化されるだけでなく、そのオブジェクトによって参照される他のオブジェクトもシリアル化されます。