我有这样的Java parcelable:
@SuppressWarnings("rawtypes")
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
public KwerendaGraficzna createFromParcel(Parcel in) {
return new KwerendaGraficzna(in);
}
public KwerendaGraficzna[] newArray(int size) {
return new KwerendaGraficzna[size];
}
};
现在尝试在Kotlin中实现它:
companion object {
@SuppressWarnings("rawtypes")
val CREATOR: Parcelable.Creator<KwerendaGraficzna!> = object : Parcelable.Creator<KwerendaGraficzna!> {
override fun createFromParcel(`in`: Parcel): KwerendaGraficzna {
return KwerendaGraficzna(`in`)
}
override fun newArray(size: Int): Array<KwerendaGraficzna!> {
return arrayOfNulls<KwerendaGraficzna!>(size)
}
}
}
当arrayOfNulls
声称它收到了KwerendaGraficzna?
时,它不会编译需要KwerendaGraficzna
那我该怎么做呢?
发布于 2016-01-10 09:27:34
我怀疑您使用的是Kotlin编译器的过时版本(因为您使用了!
)。下面是一个用最新版本正确编译的版本:
companion object {
@JvmField
val CREATOR = object : Parcelable.Creator<KwerendaGraficzna> {
override fun createFromParcel(`in`: Parcel): KwerendaGraficzna {
return KwerendaGraficzna(`in`)
}
override fun newArray(size: Int): Array<KwerendaGraficzna?> {
return arrayOfNulls(size)
}
}
}
因为Parcelable.Creator
需要一个公共静态字段,所以我们需要用@JvmField
和JvmStatic
标记CREATOR
属性。
发布于 2020-12-02 10:01:35
您不需要实现所有样板代码。
相反,
@Parcelize
data class KwerendaGraficzna(val a: Int, val b: String): Parcelable{
// TODO: others code
}
就这样。
您需要启用experimental
到true
在build.gradle
中应用上述方法。
android{
compileSdkVersion 30
defaultConfig{
applicationId "com.example"
minSdkVersion 25
targetSdkVersion 30
...
}
...
androidExtensions {
experimental = true
}
}
https://stackoverflow.com/questions/34703680
复制相似问题