重写'writeToParcel'是不允许的。 改为使用“Parceler”随播对象

我使用Jetbrains 插件在Kotlin中生成Android Parcelable类,并得到了这两个异常(不是警告,不像这里 ,所以项目不会生成):

CREATOR_DEFINITION_IS_NOT_ALLOWED:“CREATOR”的定义是不允许的。 改为使用“Parceler”随播对象。

OVERRIDING_WRITE_TO_PARCEL_IS_NOT_ALLOWED:不允许覆盖“writeToParcel”。 改为使用“Parceler”随播对象。

我已经看过类似的问题,并没有找到任何解决方案,我的情况。

我的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中所&#x8FF0; (这就是“使用”Parceler“伴侣对象”的意思)部分。