2016-01-10 24 views
10

ho quali Parcelable Java:Android Parcelable in 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]; 
    } 
}; 

ora cercando di implementarlo in 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 non verrà compilato richiede KwerendaGraficzna mentre sostiene di aver ricevuto KwerendaGraficzna?

Quindi come faccio?

+0

Vedere anche https://stackoverflow.com/questions/33551972/is-there-a-convenient-way-to-create-parcelable-data-classes-in-android-with-kotl –

risposta

15

Sospetto che si stia utilizzando una versione obsoleta del compilatore Kotlin (dato che si utilizza !). Ecco una versione compilare correttamente con la versione più recente:

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

Dal momento che la Parcelable.Creator richiede un campo statico pubblico abbiamo bisogno di segnare la proprietà CREATOR con @JvmField e JvmStatic.

+0

Grazie, controllerò più tardi. Una domanda però - perché Kotlin richiede specifiche di tipo in cui Java non lo fa? – ssuukk

+0

@ssuukk Non sei sicuro di cosa intendi. Kotlin usa [declaration-site variance] (https://kotlinlang.org/docs/reference/generics.html#declaration-site-variance) in contrasto con la varianza del sito d'uso. – miensol

+0

@miensol pensi che funzioni ancora? Finisco con un'eccezione: il protocollo Parcelable richiede un oggetto Parcelable.Creator chiamato CREATOR quando si prova a leggere da un pacchetto. – Eggman87

Problemi correlati