पार्स किया जा सकने वाला लागू करने वाला जनरेटर

kotlin-parcelize प्लगिन यह पक्का करता है कि Parcelable लागू करने पर लागू होने वाला जनरेटर.

अगर आपको Parcelable के साथ काम करना है, तो Gradle प्लग इन जोड़ें ऐप्लिकेशन की build.gradle फ़ाइल:

ग्रूवी

plugins {
    id 'kotlin-parcelize'
}

Kotlin

plugins {
    id("kotlin-parcelize")
}

जब किसी क्लास के बारे में @Parcelize के साथ एनोटेट किया जाता है, तो Parcelable को लागू किया जाता है अपने-आप जनरेट होता है, जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है:

import kotlinx.parcelize.Parcelize

@Parcelize
class User(val firstName: String, val lastName: String, val age: Int): Parcelable

@Parcelize फ़ंक्शन के लिए, सीरियल वाली सभी प्रॉपर्टी को मुख्य कंस्ट्रक्टर है. प्लग इन हर प्रॉपर्टी के लिए चेतावनी जारी करता है जिसमें बैकिंग फ़ील्ड का एलान किया गया हो. साथ ही, आप ये काम नहीं कर सकते @Parcelize लागू करें, अगर कुछ मुख्य कंस्ट्रक्टर पैरामीटर प्रॉपर्टी नहीं है.

अगर आपकी क्लास को क्रम से लगाने के लिए ज़्यादा बेहतर लॉजिक की ज़रूरत है, तो इसे कंपैनियन क्लास के अंदर लिखें:

@Parcelize
data class User(val firstName: String, val lastName: String, val age: Int) : Parcelable {
    private companion object : Parceler<User> {
        override fun User.write(parcel: Parcel, flags: Int) {
            // Custom write implementation
        }

        override fun create(parcel: Parcel): User {
            // Custom read implementation
        }
    }
}

काम करने वाली फ़ाइल के टाइप

@Parcelize कई तरह के विकल्पों के साथ काम करता है:

  • प्रिमिटिव टाइप (और उनके बॉक्स वाले वर्शन)
  • ऑब्जेक्ट और ईनम
  • String, CharSequence
  • Exception
  • Size, SizeF, Bundle, IBinder, IInterface, FileDescriptor
  • SparseArray, SparseIntArray, SparseLongArray, SparseBooleanArray
  • सभी Serializable (Date सहित) और Parcelable लागू करने की प्रक्रिया
  • काम करने वाले सभी टाइप के कलेक्शन: List (ArrayList पर मैप किया गया), Set (LinkedHashSet पर मैप किया गया), Map (LinkedHashMap पर मैप किया गया)
    • इसके अलावा, कुछ ठोस तरीके से इन्हें लागू किया जा सकता है: ArrayList, LinkedList, SortedSet, NavigableSet, HashSet, LinkedHashSet, TreeSet, SortedMap, NavigableMap, HashMap, LinkedHashMap, TreeMap, ConcurrentHashMap
  • इस्तेमाल किए जा सकने वाले सभी टाइप की कैटगरी
  • इस्तेमाल किए जा सकने वाले सभी टाइप के शून्य वाले वर्शन

कस्टम Parceler

अगर आपका टाइप सीधे इस्तेमाल नहीं किया जा सकता, तो Parceler लिखा जा सकता है मैपिंग ऑब्जेक्ट.

class ExternalClass(val value: Int)

object ExternalClassParceler : Parceler<ExternalClass> {
    override fun create(parcel: Parcel) = ExternalClass(parcel.readInt())

    override fun ExternalClass.write(parcel: Parcel, flags: Int) {
        parcel.writeInt(value)
    }
}

@TypeParceler या @WriteWith का इस्तेमाल करके, बाहरी पार्सलर लागू किया जा सकता है एनोटेशन:

// Class-local parceler
@Parcelize
@TypeParceler<ExternalClass, ExternalClassParceler>()
class MyClass(val external: ExternalClass) : Parcelable

// Property-local parceler
@Parcelize
class MyClass(@TypeParceler<ExternalClass, ExternalClassParceler>() val external: ExternalClass) : Parcelable

// Type-local parceler
@Parcelize
class MyClass(val external: @WriteWith<ExternalClassParceler>() ExternalClass) : Parcelable

सुझाव

अगर आपको kotlin-parcelize Gradle प्लग इन में कोई समस्या आती है, तो ये काम किए जा सकते हैं गड़बड़ी की शिकायत करें.