【问题标题】:Using both Parcelable class and Serializable in one class在一个类中同时使用 Parcelable 类和 Serializable
【发布时间】:2021-09-23 17:10:09
【问题描述】:

我的 Data 类具有一些属性,其中一个属性是一个实现 Serializable 的类,另一个是 实现 Parcelable 的类,其他属性是字符串。

我想让这个类(数据)实现可序列化。

具有实现 Parcelable 但未实现 Serializable 的属性的 Data 类的序列化过程中是否有任何问题?

【问题讨论】:

  • 如果您需要序列化Parcelable,您可以通过将Parcelable 属性首先转换为字节(更多关于此here)在writeObjectData 类,同时在 readObject 中做相反的操作。根据the documentation on Serializable 的另一个选项似乎是为Parcelable 属性设置一个无参数构造函数。

标签: java android serialization parcelable


【解决方案1】:

没有任何问题,因为您没有为 Parcelable 实现引入任何新属性。标准实现只是为您提供了一些辅助方法describeContentswriteToParcel 以及一个静态CREATOR 对象,它们不会成为序列化内容的一部分。

示例:

 class MyParcelable private constructor(`in`: Parcel) : Parcelable {
     private val mData: Int = `in`.readInt()

     override fun describeContents(): Int {
         return 0
     }

     override fun writeToParcel(out: Parcel, flags: Int) {
         out.writeInt(mData)
     }

     companion object {
         val CREATOR: Parcelable.Creator<MyParcelable?>
                 = object : Parcelable.Creator<MyParcelable?> {
             override fun createFromParcel(`in`: Parcel): MyParcelable? {
                 return MyParcelable(`in`)
             }

             override fun newArray(size: Int): Array<MyParcelable?> {
                 return arrayOfNulls(size)
             }
         }
     }
 }

【讨论】:

  • 谢谢!我的问题是我可以让这个 MyParcelable 类同时实现:Parcelable、Serializable 吗?
  • 是的,你可以做到 100%
猜你喜欢
  • 1970-01-01
  • 2012-03-08
  • 2018-01-04
  • 1970-01-01
  • 1970-01-01
  • 2011-06-19
  • 1970-01-01
  • 1970-01-01
  • 2019-08-24
相关资源
最近更新 更多