Dan*_*wan 6 android parcelable kotlin 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)
}
}
Run Code Online (Sandbox Code Playgroud)
您可以任意使用@Parcelize
来告诉编译器添加的方法,或者明确地执行这些(由IDEA插件生成与否,并不重要)。同时拥有两者是没有意义的。
您可以自定义 使用的逻辑@Parcelize
,但它仍然不是通过覆盖方法来完成的,而是如https://github.com/Kotlin/KEEP/blob/master/proposals/extensions/android-parcelable.md#custom-parcelables 中所述(这就是消息的“改用‘Parceler’伴随对象”部分的意思)。
归档时间: |
|
查看次数: |
2062 次 |
最近记录: |