जेनेरिक प्रतिबंध
प्रकार पैरामीटर सीमित करें
जेनेरिक प्रतिबंध, CoddyKit पर Kotlin Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Kotlin Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Kotlin Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
प्रकार पैरामीटरों पर प्रतिबंध
कभी-कभी किसी जेनेरिक को केवल कुछ विशेष प्रकार स्वीकार करने चाहिए, जैसे ऐसे प्रकार जिनकी तुलना की जा सके या जो किसी आधार प्रकार के उपप्रकार हों। जेनेरिक प्रतिबंध किसी प्रकार पैरामीटर के लिए ऊपरी सीमा निर्धारित करते हैं।
डिफ़ॉल्ट ऊपरी सीमा
किसी प्रतिबंध के बिना, प्रकार पैरामीटर की ऊपरी सीमा Any? होती है, इसलिए वह नल-योग्य प्रकारों सहित किसी भी प्रकार को स्वीकार करता है। केवल नॉन-नल प्रकारों की अनुमति देने के लिए उसे Any से सीमित करें।
fun <T : Any> requireNonNull(value: T): T {
return value
}
fun main() {
println(requireNonNull(42))
}एकल ऊपरी सीमा
यह आवश्यक करने के लिए कि T, Bound का उपप्रकार हो, T : Bound का उपयोग करें। इससे आप फ़ंक्शन के भीतर सीमा के सदस्यों को कॉल कर सकते हैं।
fun <T : Number> sumDoubled(a: T, b: T): Double {
return a.toDouble() * 2 + b.toDouble() * 2
}
fun main() {
println(sumDoubled(3, 4))
println(sumDoubled(1.5, 2.5))
}तुलनीय सीमा
एक सामान्य सीमा Comparable<T> है, जो आपको तत्वों की तुलना <, > या compareTo से करने देती है।
fun <T : Comparable<T>> maxOf2(a: T, b: T): T {
return if (a > b) a else b
}
fun main() {
println(maxOf2(3, 9))
println(maxOf2("apple", "banana"))
}सीमा के सदस्यों को कॉल करना
प्रतिबंधित जेनेरिक के भीतर कंपाइलर जानता है कि T के पास सीमा का एपीआई है, इसलिए आप बिना कास्ट किए उन विधियों को सीधे कॉल कर सकते हैं।
fun <T : CharSequence> describe(value: T): String {
return "Length is ${value.length}"
}
fun main() {
println(describe("hello"))
println(describe(StringBuilder("hi")))
}where के साथ कई सीमाएँ
एक से अधिक सीमाओं के लिए where क्लॉज़ का उपयोग करें। तब T को सूचीबद्ध ALL प्रतिबंधों को संतुष्ट करना होगा।
fun <T> copyWhenValid(value: T): T
where T : CharSequence, T : Comparable<T> {
return value
}
fun main() {
println(copyWhenValid("text"))
}क्लासों पर सीमाएँ
प्रतिबंध जेनेरिक क्लासों पर भी काम करते हैं और यह सीमित करते हैं कि क्लास को किन प्रकारों के साथ बनाया जा सकता है।
class NumberBox<T : Number>(val value: T) {
fun asDouble(): Double = value.toDouble()
}
fun main() {
val box = NumberBox(10)
println(box.asDouble())
}प्रतिबंध से संचालन सक्षम होते हैं
प्रतिबंध का मुख्य उद्देश्य संचालन उपलब्ध कराना है। T : Number के बिना आप toDouble() को कॉल नहीं कर सकते; सीमा यह सुनिश्चित करती है कि यह विधि मौजूद है।
व्यवहार में नॉन-नल सीमा
Any से सीमा निर्धारित करने पर कंपाइल समय में नल-योग्य आर्ग्युमेंट अस्वीकार हो जाते हैं। नॉन-नल जेनेरिक्स आवश्यक करने का यह एक उपयोगी तरीका है।
fun <T : Any> firstNonNull(a: T, b: T): T = a
fun main() {
println(firstNonNull("x", "y"))
// firstNonNull(null, "y") would not compile
}वैरिएंस के साथ संयोजन
प्रतिबंध और वैरिएंस अलग-अलग समस्याएँ हल करते हैं: वैरिएंस (in/out) उपप्रकार संबंधों को नियंत्रित करता है, जबकि प्रतिबंध (: सीमाएँ, where) यह सीमित करते हैं कि किन प्रकारों की अनुमति है। दोनों का उपयोग साथ किया जा सकता है।
अच्छे प्रतिबंध बनाना
प्रतिबंध तभी जोड़ें जब आपको प्रकार से कोई क्षमता चाहिए। बहुत अधिक प्रतिबंध पुनः उपयोग की क्षमता घटाते हैं, जबकि बहुत कम प्रतिबंध कास्ट करने के लिए मजबूर करते हैं। उस सबसे सामान्य प्रकार तक सीमा निर्धारित करें जो आपके द्वारा उपयोग किए जाने वाले संचालन उपलब्ध कराता हो।
त्वरित जाँच
आप किसी प्रकार पैरामीटर के लिए एक से अधिक सीमाएँ संतुष्ट करना कैसे आवश्यक करेंगे?
पुनरावलोकन
जेनेरिक प्रतिबंध T : Bound (या कई सीमाओं के लिए where) के साथ ऊपरी सीमाएँ निर्धारित करते हैं। इससे सीमा के संचालन उपलब्ध होते हैं और असंगत प्रकार बाहर हो जाते हैं। Any से सीमा निर्धारित करने पर नॉन-नल मान आवश्यक होते हैं। वैरिएंस के साथ मिलकर प्रतिबंध आपको सुरक्षित और अभिव्यंजक जेनेरिक्स बनाने देते हैं। इससे जेनेरिक्स और वैरिएंस पाठ्यक्रम पूरा होता है।
एआई शिक्षक के साथ Kotlin सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 51
- पाठ
- 203
अक्सर पूछे जाने वाले प्रश्न
क्या “जेनेरिक प्रतिबंध” पाठ निःशुल्क है?
हाँ — Kotlin Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “जेनेरिक प्रतिबंध” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Kotlin Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“जेनेरिक प्रतिबंध” में मैं क्या सीखूँगा?
प्रकार पैरामीटर सीमित करें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Kotlin Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Kotlin Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Kotlin Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।
“जेनेरिक प्रतिबंध” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Kotlin Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Kotlin Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- जेनेरिक फ़ंक्शन और क्लास
- घोषणा-स्थल वैरिएंस
- उपयोग-स्थल वैरिएंस
- जेनेरिक प्रतिबंध