Android Parcelable в Котлине

У меня есть Java Java:

@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?

Итак, как мне это сделать?

Ответ 1

Я подозреваю, что вы используете устаревшую версию компилятора 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 требуется публичное статическое поле, нам нужно пометить свойство CREATOR @JvmField и JvmStatic.