खोज…
डीटीओ (पीओजेओ / पीओसीओ) बनाना
कोटलिन में डेटा क्लासेस डेटा को होल्ड करने के अलावा कुछ भी करने के लिए बनाई गई क्लास हैं। ऐसी कक्षाओं को data
के रूप में चिह्नित किया जाता data
:
data class User(var firstname: String, var lastname: String, var age: Int)
उपरोक्त कोड स्वचालित रूप से उत्पन्न निम्नलिखित के साथ एक User
वर्ग बनाता है:
- सभी संपत्तियों के लिए गेटर्स और सेटर्स (केवल
val
एस के लिए गेटर्स) -
equals()
-
hashcode()
-
toString()
-
copy()
-
componentN()
(जहांN
घोषणा के क्रम में संबंधित संपत्ति है)
किसी फ़ंक्शन के समान, डिफ़ॉल्ट मान भी निर्दिष्ट किए जा सकते हैं:
data class User(var firstname: String = "Joe", var lastname: String = "Bloggs", var age: Int = 20)
अधिक विवरण यहां पाया जा सकता है डेटा कक्षाएं ।
किसी सूची को छानना
val list = listOf(1,2,3,4,5,6)
//filter out even numbers
val even = list.filter { it % 2 == 0 }
println(even) //returns [2,4]
सार्वजनिक निर्माण में प्रदान किए बिना एक वर्ग को सौंपें
मान लें कि आप एक वर्ग को सौंपना चाहते हैं, लेकिन आप निर्माण पैरामीटर में प्रत्यायोजित वर्ग को प्रदान नहीं करना चाहते हैं। इसके बजाय, आप इसे निजी तौर पर बनाना चाहते हैं, जिससे कंस्ट्रक्टर कॉलर इससे अनजान है। पहले तो यह असंभव लग सकता है क्योंकि वर्ग प्रतिनिधिमंडल केवल निर्माण मापदंडों को सौंपने की अनुमति देता है। हालाँकि, ऐसा करने का एक तरीका है, जैसा कि इस उत्तर में दिया गया है:
class MyTable private constructor(table: Table<Int, Int, Int>) : Table<Int, Int, Int> by table {
constructor() : this(TreeBasedTable.create()) // or a different type of table if desired
}
इसके साथ, आप सिर्फ MyTable
के कंस्ट्रक्टर को इस तरह कह सकते हैं: MyTable()
। Table<Int, Int, Int>
जिसमें MyTable
प्रतिनिधियों को निजी रूप से बनाया जाएगा। कंस्ट्रक्टर कॉलर इसके बारे में कुछ नहीं जानता है।
यह उदाहरण इस एसओ प्रश्न पर आधारित है।
कोटलिन में धारावाहिक और धारावाहिक विचलन
serialVersionUID
में एक वर्ग के लिए serialVersionUID
बनाने के लिए आपके पास कुछ विकल्प हैं, जिसमें कक्षा के साथी ऑब्जेक्ट में एक सदस्य को शामिल करना शामिल है।
सबसे संक्षिप्त बाइटकोड एक private const val
से आता है जो इस वर्ग में एक निजी स्थिर वैरिएबल बन जाएगा, इस मामले में MySpecialCase
:
class MySpecialCase : Serializable {
companion object {
private const val serialVersionUID: Long = 123
}
}
आप इन रूपों का उपयोग कर सकते हैं, प्रत्येक के पास गेटटर / सेटर विधियों के साइड इफेक्ट होते हैं जो क्रमबद्धता के लिए आवश्यक नहीं हैं ...
class MySpecialCase : Serializable {
companion object {
private val serialVersionUID: Long = 123
}
}
यह स्थैतिक क्षेत्र बनाता है, लेकिन साथ ही साथ एक ऑब्जेक्ट बनाता है getSerialVersionUID
जो कि अनावश्यक है।
class MySpecialCase : Serializable {
companion object {
@JvmStatic private val serialVersionUID: Long = 123
}
}
यह स्टैटिक फील्ड बनाता है, लेकिन स्टैटिक getSerialVersionUID
साथ ही getSerialVersionUID
भी बनाता है जिसमें क्लास MySpecialCase
जो अनावश्यक है।
लेकिन सभी serialVersionUID
को एक Serializable
क्लास में जोड़ने की विधि के रूप में काम करते हैं।
कोटलिन में धाराप्रवाह तरीके
कोटलिन में धाराप्रवाह तरीके जावा के समान हो सकते हैं:
fun doSomething() {
someOtherAction()
return this
}
लेकिन आप एक्सटेंशन फ़ंक्शन बनाकर उन्हें और अधिक कार्यात्मक बना सकते हैं जैसे:
fun <T: Any> T.fluently(func: ()->Unit): T {
func()
return this
}
जो तब अधिक स्पष्ट रूप से धाराप्रवाह कार्यों की अनुमति देता है:
fun doSomething() {
return fluently { someOtherAction() }
}
अशक्त वस्तुओं के साथ काम करने को आसान बनाने के लिए लेट या भी का उपयोग करें
let
Kotlin एक स्थानीय वस्तु इस पर बुलाया गया था से बाध्यकारी बनाता में। उदाहरण:
val str = "foo"
str.let {
println(it) // it
}
यह "foo"
को प्रिंट करेगा और Unit
को लौटा देगा।
let
और also
बीच का अंतर also
है कि आप let
ब्लॉक से किसी भी मूल्य को वापस कर सकते हैं। also
दूसरे हाथ में हमेशा Unit
।
अब यह क्यों उपयोगी है, आप पूछें? क्योंकि यदि आप एक ऐसी विधि कहते हैं, जो null
और आप केवल कुछ कोड चलाना चाहते हैं, जब वह वापसी मान null
नहीं है तो आप let
उपयोग कर सकते हैं या ऐसा also
कर सकते हैं:
val str: String? = someFun()
str?.let {
println(it)
}
कोड का यह टुकड़ा केवल let
ब्लॉक को चलाएगा जब str
null
नहीं होगा। null
सुरक्षा ऑपरेटर ( ?
) पर ध्यान दें।
ऑब्जेक्ट्स को इनिशियलाइज़ करने के लिए या मेथड चैनिंग हासिल करने के लिए लागू करें
apply
का प्रलेखन निम्नलिखित कहता है:
साथ निर्दिष्ट समारोह ब्लॉक कॉल
this
अपने रिसीवर के रूप में मूल्य और रिटर्नthis
मूल्य।
जबकि kdoc इतना उपयोगी नहीं है apply
वास्तव में एक उपयोगी कार्य है। आम आदमी की शर्तों में apply
एक गुंजाइश है जिसमें this
आपके द्वारा apply
गई वस्तु के लिए बाध्य है। यह आपको कुछ कोड को बंद करने में सक्षम बनाता है जब आपको किसी ऑब्जेक्ट पर कई तरीकों को कॉल करने की आवश्यकता होती है जिसे आप बाद में वापस कर देंगे। उदाहरण:
File(dir).apply { mkdirs() }
इसे लिखने के समान है:
fun makeDir(String path): File {
val result = new File(path)
result.mkdirs()
return result
}