Kotlin中的Android Parcelable

ssu*_*ukk 10 android parcelable kotlin

我有这样的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];
    }
};
Run Code Online (Sandbox Code Playgroud)

现在尝试在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)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

arrayOfNullsKwerendaGraficzna在声称收到要求时不会编译KwerendaGraficzna?

那我该怎么做?

mie*_*sol 15

我怀疑你使用过时版本的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)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

由于Parcelable.Creator需要公共静态字段,我们需要CREATOR使用@JvmField和标记属性JvmStatic.