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

标签 java android serialization serializable

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/

相关文章:

java - Spring JMS - 无法使用嵌入式代理连接到代理 URL

java - 在 JSF 中获取请求参数值

Android - ViewGroup onDraw 是否需要遍历 subview 并显式调用 onDraw?

java - 简单的 XML 和自定义列表

json - Spring Boot Rest - OffsetDateTime 以浮点形式返回

java - JPA/hibernate : CriteriaBuilder - How to create query using relationship object?

java - 为一台计算机系统设置 Java 应用程序

android - 可扩展 ListView 指示器显示标题高度?

android - 使用支持库共享操作提供程序时出现空指针异常

c# - 将自定义类序列化为 XML