【问题标题】:@Parcelize and Superclass, doubling data because of constructor requirement@Parcelize 和超类,由于构造函数要求而使数据翻倍
【发布时间】:2020-05-13 09:25:26
【问题描述】:

我有一个 Result parcelable 类,它应该用作密钥和可打包数据的容器。我是这样定义的:

@Parcelize
open class Result<out T : Parcelable>(val key: String, val data: T?) : Parcelable

问题是,在定义子类时,为了让@Parcelize 工作,我需要在构造函数中将val 添加到对象中,本质上是使数据被两次写入parcel 中。这是一个例子:

@Parcelize
class LessonFinishedResult(private val lessonActivityData: LessonActivityData) :
    Result<LessonActivityData>(LessonActivityData.LESSON_KEY, lessonActivityData), Parcelable

我想要这个:

@Parcelize
class LessonFinishedResult(lessonActivityData: LessonActivityData) :
    Result<LessonActivityData>(LessonActivityData.LESSON_KEY, lessonActivityData), Parcelable

但这是不允许的。有没有聪明的方法可以解决这个问题?还有一件事,有没有办法可以避免手动使用 Result&lt;LessonActivityData&gt; 并从传递的对象中自动推断出类型?

谢谢!

【问题讨论】:

    标签: android generics kotlin parcelable


    【解决方案1】:

    本质上是两次将数据写入包裹两次

    不是; @Parcelize 生成的代码根本不关心超类。它甚至不能是Parcelizable。只有主要的构造函数参数(在本例中为val lessonActivityData)被写入/读取,并且在读取时将正确的参数传递给超类构造函数就足够了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-18
      • 1970-01-01
      • 2013-10-25
      • 1970-01-01
      • 2010-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多