MyClass1 extends MyClass2 implements Serializable
我正在尝试在 HashMap 上的 Android 应用程序中使用 saveOnInstanceState
savedInstanceState.getSerializable()
我已经对使用自定义类的其他 HashMap 执行了此操作,但通过使这些类可序列化,但是即使在使此可序列化之后,我似乎也会遇到错误,因为 MyClass2 不可序列化。 MyClass2 是第三方库,因此我无法修改它并使其可序列化,我能做些什么吗?
谢谢!
最佳答案
正如 Jan 的回答所述,您通常不能这样做。在某些情况下,有一些解决方法可以实现这一点,但即使有效,它们也有点脆弱。要获得此机会,您需要满足以下条件才能申请:
- 您对父类(super class)结构有足够的了解,知道捕获其当前状态需要哪些数据。
- 您需要(通过公共(public)或 protected 成员变量或通过 getter 之类的方式)访问捕获其当前状态所需的数据。
- 您需要拥有访问权限(通过公共(public)或 protected 成员变量或通过 setter 之类的方式)来更改重建其当前状态所需的数据字段。
- 您需要使用
serialPersistentFields
方法或精心构造的writeObject
/readObject
实现对来保存/读取数据序列化和反序列化期间的父类(super class)。这必然需要了解并访问前面要点中描述的父类(super class)结构。 - 父类(super class)必须有一个无参数构造函数。 (这对于序列化来说并不重要,但是当您反序列化时您将需要它。)
当然,在执行所有这些操作时,您将使用父类(super class)的一些知识,这意味着如果父类(super class)实现发生更改,这可能会以难以发现的方式出现问题。
关于java - 如何使 java 类可序列化并扩展不可序列化的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32744595/