Kotlin जेनेरिक्स में `*` और `Any` के बीच अंतर: स्टार बनाम Any
सभी को नमस्ते! मैंने हाल ही में Kotlin सीखना शुरू किया है और जेनेरिक्स में एक समझ से परे बिंदु पर आ गया हूँ।
दस्तावेज़ीकरण में मैंने देखा कि जेनेरिक्स में `*` (star projection) का उपयोग किया जा सकता है, और `` भी लिखा जा सकता है। पहली नज़र में ऐसा लगता है कि वे एक ही काम करते हैं — कलेक्शन में किसी भी प्रकार को स्टोर करने की अनुमति देते हैं। लेकिन मुझे लगता है कि उनके बीच कुछ महत्वपूर्ण अंतर है।
उदाहरण के लिए, मैं यह कोड लिखता हूँ:
```kotlin
val list1: MutableList = mutableListOf("स्ट्रिंग", 42, 3.14)
val list2: MutableList<*> = mutableListOf("स्ट्रिंग", 42, 3.14)
```
दोनों वेरिएबल काम करते हैं, और मैं उनमें कोई भी एलिमेंट जोड़ सकता हूँ। लेकिन अगर मैं एलिमेंट को पढ़ने और एक विशिष्ट प्रकार के वेरिएबल को असाइन करने का प्रयास करता हूँ, तो अजीब चीज़ें होती हैं।
अगर मैं लिखता हूँ:
```kotlin
val item1: String = list1[0] // कंपाइलेशन एरर? या नहीं?
val item2: String = list2[0] // और यहाँ?
```
पहला विकल्प कंपाइल होता है, जबकि दूसरा नहीं। ऐसा क्यों? और `*` और `Any` के बीच आखिर अंतर क्या है? कब क्या उपयोग करें? कृपया सरल भाषा में समझाएँ।