2016-01-10 13 views
10

में मैं इस तरह के जावा parcelable है:एंड्रॉयड Parcelable 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]; 
    } 
}; 

अब 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?

प्राप्त

तो मैं इसे कैसे कर सकता हूं?

+0

यह भी देखें https://stackoverflow.com/questions/33551972/is-there-a-convenient-way-to-create-parcelable-data-classes-in-android-with-kotl –

उत्तर

15

मुझे संदेह है कि आप कोटलिन कंपाइलर का पुराना संस्करण उपयोग कर रहे हैं (क्योंकि आप ! का उपयोग करते हैं)।

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 के बाद से एक सार्वजनिक स्थैतिक क्षेत्र हम @JvmField और JvmStatic साथ CREATOR संपत्ति चिह्नित करने की आवश्यकता की आवश्यकता है: यहाँ एक संस्करण नवीनतम संस्करण के साथ ठीक से संकलन है।

+0

Thanx, मैं जांच करूंगा बाद में। हालांकि एक सवाल - कोटलिन को प्रकार विनिर्देश की आवश्यकता क्यों है जहां जावा नहीं करता है? – ssuukk

+0

@ssuukk सुनिश्चित नहीं है कि आपका क्या मतलब है। कोटलिन उपयोग-साइट भिन्नता के विरोध में [घोषणा-स्थल भिन्नता] (https://kotlinlang.org/docs/reference/generics.html#declaration-site-variance) का उपयोग करता है। – miensol

+0

@miensol क्या आपको लगता है कि यह अभी भी काम करता है? मैं एक अपवाद के साथ समाप्त होता हूं: पार्ससेल करने योग्य प्रोटोकॉल को एक पार्सलबल की आवश्यकता होती है। निर्माता को बंडल से पढ़ने की कोशिश करते समय CREATOR कहा जाता है। – Eggman87

संबंधित मुद्दे