@Parcelize和Superclass,由于构造函数的要求,数据翻倍。

问题描述 投票:0回答:1

我有一个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类,它应该作为一个键和一个包裹数据的容器。

android generics kotlin parcelable
1个回答
0
投票

基本上使被写入包裹的数据增加了两次。

不是的;由 @Parcelize 根本不在乎超类。它甚至可以不 Parcelizable. 只有主构造函数参数(在本例中为 val lessonActivityData)是写读的,读的时候只要把正确的参数传给超类构造函数就可以了。

© www.soinside.com 2019 - 2024. All rights reserved.