2016-01-10 14 views
10

mam taki parcelable Java:Android Parcelable w Kotlin

@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]; 
    } 
}; 

teraz stara się wdrożyć go w 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 nie skompiluje wymaga KwerendaGraficzna natomiast twierdzi, że otrzymał KwerendaGraficzna?

Jak mogę to zrobić?

+0

Zobacz również https://stackoverflow.com/questions/33551972/is-there-a-convenient-way-to-create-parcelable-data-classes-in-android-with-kotl –

Odpowiedz

15

Podejrzewam, że używasz nieaktualnej wersji kompilatora Kotlin (ponieważ używasz !). Oto wersja kompilacji poprawnie z najnowszą wersją:

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) 
     } 
    } 
} 

Od Parcelable.Creator wymaga publicznego statycznego pola musimy oznaczyć właściwość CREATOR z @JvmField i JvmStatic.

+0

Thanx, sprawdzę to później. Jedno pytanie - dlaczego Kotlin wymaga specyfikacji typu, gdzie nie ma Java? – ssuukk

+0

@ssuukk Nie jesteś pewien co masz na myśli. Kotlin używa [wariancji strony deklaracji] (https://kotlinlang.org/docs/reference/generics.html#declaration-site-variance) w przeciwieństwie do wariancji strony użytkowej. – miensol

+0

@miensol myślisz, że to nadal działa? Kończę się z wyjątkiem: Protokół Parcelable wymaga obiektu Parcelable.Creator o nazwie CREATOR podczas próby odczytu z pakietu. – Eggman87