@Parcelize注释与继承一起

mur*_*urt 8 android parcelable kotlin

我无法使用@parcelize注释创建通用结构。我希望将构造函数用作Jason,Room和Parcelable的构造函数。

假设我们有课

@Parcelize
class Food(var taste: String = "")
Run Code Online (Sandbox Code Playgroud)

现在首先想到两个解决方案

1,味道必须为var或val的抱怨,才能使用可用的Parceable构造函数

@Parcelize
class FastFood(var callory:String = "", taste: String): Food(taste) // error
Run Code Online (Sandbox Code Playgroud)

2.我必须明确表达卵磷脂味道的抱怨-那么多态性有什么好处?

@Parcelize
class FastFood(var callory: String = "", var taste: String): Food(taste) // error
Run Code Online (Sandbox Code Playgroud)

如何与您的库一起有效地使用继承?

Onr*_*egs 4

在 Kotlin 中,如果您在构造函数“val”或“var”中添加值,它就会成为类属性。要使用 Parceable,您需要添加它,因为没有它 Parcelable.Creator 将无法访问它。然后,您需要向 Food 类和属性 'taste' 添加 'open' 修饰符,因为在 Kotlin 中默认情况下都是最终的,因此您将能够覆盖味道值。

@Parcelize
open class Food(open val taste: String)

@Parcelize
class FastFood(var callory:String = "", override val taste: String): Food(taste)
Run Code Online (Sandbox Code Playgroud)

  • 你的解决方案不会起作用。关于此问题有一个未解决的问题:https://youtrack.jetbrains.com/issue/KT-22139 (4认同)