如何使扩展了不可序列化类的java类可序列化

如何使扩展了不可序列化类的java类可序列化,java,android,serialization,serializable,Java,Android,Serialization,Serializable,我试图在HashMap上的android应用程序中使用saveOnInstanceState,方法是使用 MyClass1 extends MyClass2 implements Serializable 我对其他使用自定义类的hashmaps也这样做了,但是通过使这些类可序列化,即使在我使其可序列化之后,我似乎也会在这方面出错,因为MyClass2不可序列化。MyClass2是第三方库,因此我无法修改它并使其可序列化,我能做些什么吗 谢谢大家! 不幸的是你不能。如果你能做到这一点,那将是一个

我试图在HashMap上的android应用程序中使用saveOnInstanceState,方法是使用

MyClass1 extends MyClass2 implements Serializable
我对其他使用自定义类的hashmaps也这样做了,但是通过使这些类可序列化,即使在我使其可序列化之后,我似乎也会在这方面出错,因为MyClass2不可序列化。MyClass2是第三方库,因此我无法修改它并使其可序列化,我能做些什么吗


谢谢大家!

不幸的是你不能。如果你能做到这一点,那将是一个安全缺陷,因为你可以序列化每个类,即使该类不应该序列化。

正如Jan的回答所述,你通常不能这样做。在某些情况下,有一些变通办法可以实现这一目标,但即使它们奏效,也有点脆弱。要获得此机会,您需要以下条件进行申请:

  • 您对超类结构有足够的了解,以了解捕获其当前状态所需的数据
  • 您需要(通过公共或受保护的成员变量或通过类似getter的方式)访问捕获其当前状态所需的数据
  • 您需要具有访问权限(通过公共或受保护的成员变量,或通过类似setter的方式)来更改重建其当前状态所需的数据字段
  • 您需要使用
    serialPersistentFields
    方法或精心构造的
    writeObject
    /
    readObject
    对实现,在序列化和反序列化期间从超类保存/读取数据。这必然需要了解并访问前面项目符号中描述的超类结构
  • 超类必须具有无参数构造函数。(这对于序列化并不重要,但在反序列化时需要它。)

当然,在进行所有这些工作时,您将使用一些关于超类的知识,这意味着如果超类实现发生变化,可能很难找到解决方法。

不幸的是,您不能。如果你能做到这一点,那将是一个安全缺陷,因为你可以序列化每个类,即使这个类不应该序列化。
 savedInstanceState.getSerializable()