2016-01-10 35 views
10

Tôi có ví dụ Java parcelable:Android Parcelable trong 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]; 
    } 
}; 

Bây giờ cố gắng để thực hiện nó trong 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 sẽ không biên dịch đòi hỏi KwerendaGraficzna khi nó tuyên bố nó nhận KwerendaGraficzna?

Vậy làm cách nào để thực hiện?

+0

Cũng thấy https://stackoverflow.com/questions/33551972/is-there-a-convenient-way-to-create-parcelable-data-classes-in-android-with-kotl –

Trả lời

15

Tôi nghi ngờ bạn đang sử dụng phiên bản trình biên dịch Kotlin lỗi thời (vì bạn sử dụng !). Dưới đây là một phiên bản biên dịch đúng với phiên bản mới nhất:

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

Kể từ khi Parcelable.Creator đòi hỏi một lĩnh vực public static chúng ta cần phải đánh dấu CREATOR tài sản với @JvmFieldJvmStatic.

+0

Thanx, tôi sẽ kiểm tra trễ rồi. Một câu hỏi mặc dù - tại sao Kotlin yêu cầu đặc điểm kỹ thuật kiểu khi Java không? – ssuukk

+0

@ssuukk Không chắc chắn ý bạn là gì. Kotlin sử dụng [phương sai khai báo] (https://kotlinlang.org/docs/reference/generics.html#declaration-site-variance) thay vì phương sai sử dụng trang web. – miensol

+0

@miensol bạn có nghĩ rằng điều này vẫn hoạt động? Tôi kết thúc với một ngoại lệ: giao thức Parcelable yêu cầu một đối tượng Parcelable.Creator gọi là CREATOR khi cố đọc từ một gói. – Eggman87

Các vấn đề liên quan