如何使java类序列化扩展非序列化

时间:2015-09-23 16:14:47

标签: java android serialization serializable

MyClass1 extends MyClass2 implements Serializable

我正在尝试使用

在HashMap上的android应用程序中使用saveOnInstanceState
 savedInstanceState.getSerializable()

我已经使用其他使用自定义类的哈希映射,但是通过使这些类可序列化,但是我似乎也因为MyClass2不可序列化而得到了这个序列化的错误。 MyClass2是第三方库,因此我无法对其进行修改并使其可序列化,我能做些什么吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

正如Jan的回答所说,你通常不会这样做。在某些情况下,有一些工作可以实现它,但即使它们工作也有点脆弱。要有机会,您需要以下内容才能申请:

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

当然,在完成所有这些工作时,您将使用超类的一些知识,这意味着如果超类实现发生变化,这可能会以难以找到的方式破解。

答案 1 :(得分:0)

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