使密封的 class 层次结构可打包
Making sealed class hierarchy Parcelable
我有类似下面的内容,我想将它们作为意图参数传递;
sealed class BasketType : Parcelable {
class BasketOne(val basketId: String): BasketType() {
constructor(parcel: Parcel) : this(parcel.readString()) {
}
override fun writeToParcel(parcel: Parcel, flags: Int) {
super.writeToParcel(parcel, flags)
parcel.writeString(basketId)
}
override fun describeContents(): Int {
return 0
}
...
}
...
}
但是我收到以下错误;
Abstract member cannot be accessed directly
在 super.writeToParcel(parcel, flags)
行上,这是一种预期。
我四处寻找解决方法,但找不到。有什么想法吗?
您只需省略 super
调用即可。该功能没有超级实现,这就是它抱怨的原因。
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeString(basketId)
}
super
调用之所以存在,是因为 android studio 的代码生成将它放在那里,而没有检查它是否确实可行。
如果你想在 sealed class
中使用 @Parcelize
,请这样做:
sealed class AssistantType : Parcelable{
@Parcelize data class Dashboard(
val firstName: String,
val hasGoal: Boolean,
val hasOverDuePayment: Boolean
) : AssistantType()
@Parcelize data class Detail(
val firstName: String,
val isGoalAchived: Boolean
) : AssistantType()
}
并将以下代码添加到您的应用级别 gradle。
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
androidExtensions {
experimental = true
}
我有类似下面的内容,我想将它们作为意图参数传递;
sealed class BasketType : Parcelable {
class BasketOne(val basketId: String): BasketType() {
constructor(parcel: Parcel) : this(parcel.readString()) {
}
override fun writeToParcel(parcel: Parcel, flags: Int) {
super.writeToParcel(parcel, flags)
parcel.writeString(basketId)
}
override fun describeContents(): Int {
return 0
}
...
}
...
}
但是我收到以下错误;
Abstract member cannot be accessed directly
在 super.writeToParcel(parcel, flags)
行上,这是一种预期。
我四处寻找解决方法,但找不到。有什么想法吗?
您只需省略 super
调用即可。该功能没有超级实现,这就是它抱怨的原因。
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeString(basketId)
}
super
调用之所以存在,是因为 android studio 的代码生成将它放在那里,而没有检查它是否确实可行。
如果你想在 sealed class
中使用 @Parcelize
,请这样做:
sealed class AssistantType : Parcelable{
@Parcelize data class Dashboard(
val firstName: String,
val hasGoal: Boolean,
val hasOverDuePayment: Boolean
) : AssistantType()
@Parcelize data class Detail(
val firstName: String,
val isGoalAchived: Boolean
) : AssistantType()
}
并将以下代码添加到您的应用级别 gradle。
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
androidExtensions {
experimental = true
}