Android Parcelable in Kotlin
我有这样的Java可打包内容:
1 2 3 4 5 6 7 8 9 10 | @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中实现它:
1 2 3 4 5 6 7 8 9 10 11 12 | 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) } } } |
时不会编译需要
那我该怎么办呢?
我怀疑您使用的是过时的Kotlin编译器版本(因为您使用的是
1 2 3 4 5 6 7 8 9 10 11 12 | 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) } } } |
由于
您不需要实现所有样板代码。
相反,
1 2 3 4 | @Parcelize data class KwerendaGraficzna(val a: Int, val b: String): Parcelable{ // TODO: others code } |
就是这样。
您需要在
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | android{ compileSdkVersion 30 defaultConfig{ applicationId"com.example" minSdkVersion 25 targetSdkVersion 30 ... } ... androidExtensions { experimental = true } } |