我使用Jetbrains plugin在Kotlin中生成Android Parcelable类,并获得了这两个例外(不是警告,与here不同,所以项目没有构建):
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)
}
}
答案 0 :(得分:1)
你可以 使用@Parcelize
告诉编译器添加方法,或明确地实现它们(由IDEA插件生成或不生成,它没有&# 39; t))。同时拥有两者是没有意义的。
您可以自定义@Parcelize
使用的逻辑,但仍然没有通过覆盖方法来完成,但正如https://github.com/Kotlin/KEEP/blob/master/proposals/extensions/android-parcelable.md#custom-parcelables中所描述的那样(&#34;&#34;使用&#39; Parceler&#39;伴侣对象&#34;消息的一部分意味着。)