我有一个Result parcelable类,它应该作为一个键和一个包裹数据的容器。我是这样定义的。
@Parcelize
open class Result<out T : Parcelable>(val key: String, val data: T?) : Parcelable
问题是在定义子类的时候 为了让@Parcelize工作,我需要加入 val
到对象的构造函数中,本质上使被写入的数据两次写入包裹中。下面是一个例子。
@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<LessonActivityData>
并从传递的对象中自动推断出类型?
谢谢!我有一个Result parcelable类,它应该作为一个键和一个包裹数据的容器。
基本上使被写入包裹的数据增加了两次。
不是的;由 @Parcelize
根本不在乎超类。它甚至可以不 Parcelizable
. 只有主构造函数参数(在本例中为 val lessonActivityData
)是写读的,读的时候只要把正确的参数传给超类构造函数就可以了。