gpt4 book ai didi

android - 不允许覆盖 'writeToParcel'。使用 'Parceler' 伴生对象代替

转载 作者:行者123 更新时间:2023-12-02 10:12:36 26 4
gpt4 key购买 nike

我使用了 Jetbrains plugin用于在 Kotlin 中生成 Android Parcelable 类,并得到这两个异常(不是警告,与 here 不同,因此项目无法构建):

CREATOR_DEFINITION_IS_NOT_ALLOWED: 'CREATOR' definition is notallowed. Use 'Parceler' companion object instead.

OVERRIDING_WRITE_TO_PARCEL_IS_NOT_ALLOWED: Overriding 'writeToParcel' is not allowed. Use 'Parceler' companion objectinstead.

我浏览过类似的问题,但没有找到适合我的情况的解决方案。

我的 Kotlin 版本:1.1.51(根据 Gradle),但此功能是在 1.1.4 中添加的:https://blog.jetbrains.com/kotlin/2017/08/kotlin-1-1-4-is-out/

自动生成的代码:

@Parcelize
data class User(
val id: Int,
val cardId: String,
val coefficent: Float = 1.0F,
val name: String,
val surname: String = ""
) : Parcelable {
constructor(source: Parcel) : this(
source.readInt(),
source.readString(),
source.readFloat(),
source.readString(),
source.readString()
)

companion object {
@JvmField
val CREATOR: Parcelable.Creator<User> = object : Parcelable.Creator<User> {
override fun createFromParcel(source: Parcel): User = User(source)
override fun newArray(size: Int): Array<User?> = arrayOfNulls(size)
}
}

override fun describeContents() = 0

override fun writeToParcel(dest: Parcel, flags: Int) = with(dest) {
writeInt(id)
writeString(cardId)
writeFloat(coefficent)
writeString(name)
writeString(surname)
}
}

最佳答案

您可以使用@Parcelize告诉编译器添加方法,显式实现它们(是否由IDEA插件生成) , 没关系)。同时拥有两者是没有意义的。

您可以自定义@Parcelize使用的逻辑,但仍然不是通过重写方法来完成,而是如 https://github.com/Kotlin/KEEP/blob/master/proposals/extensions/android-parcelable.md#custom-parcelables 中所述。 (这就是消息中“使用‘Parceler’伴随对象”部分的含义)。

关于android - 不允许覆盖 'writeToParcel'。使用 'Parceler' 伴生对象代替,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46978605/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com