繁体   English   中英

如何使扩展非序列化的Java类可序列化

[英]How to make a java class serializable that extends a non serializable

MyClass1 extends MyClass2 implements Serializable

我正在尝试通过使用HashMap上的android应用程序中使用saveOnInstanceState

 savedInstanceState.getSerializable()

我已经使用了其他使用自定义类的哈希表来做到这一点,但是通过将这些类设置为可序列化,但是即使我将其设置为可序列化之后,由于MyClass2不可序列化,我似乎还是会出现错误。 MyClass2是第三方库,因此我无法对其进行修改并使其可序列化,我可以做什么?

谢谢!

正如Jan的回答所述,您通常无法执行此操作。 在某些情况下,有一些解决方法可以使它实现,但是即使工作了,它们也会变得有些脆弱。 为了有这个机会,您需要满足以下条件:

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

当然,在完成所有这些操作后,您将使用一些有关超类的知识,这意味着,如果超类的实现发生变化,则可能会以难以发现的方式中断。

不幸的是你不能。 如果可以做到这一点,那将是一个安全漏洞,因为即使不应该对类进行序列化,您也可以对其进行序列化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM