Kotlin में out कीवर्ड का क्या अर्थ है और इसे जेनेरिक के साथ कैसे उपयोग करें?
नमस्ते! मैं Java के बाद Kotlin सीखना शुरू किया और एक ऐसी संरचना देखी जो मेरे लिए समझ से बाहर थी। Java में मैं `? extends T` और `? super T` जैसे wildcard वाले जेनेरिक का आदी था। लेकिन Kotlin में मैं क्लास डिक्लेरेशन में ही `in` और `out` कीवर्ड देखता हूं।
उदाहरण के लिए, मुझे ऐसा कोड मिला:
```kotlin
interface Source {
fun get(): T
}
```
`T` से पहले `out` का क्या मतलब है? मैंने `out` के बिना अपनी क्लास लिखने की कोशिश की:
```kotlin
class Box(private val item: T) {
fun get(): T = item
fun set(newItem: T) { /* ... */ }
}
```
और यह काम करता है। लेकिन अगर मैं `out` जोड़ता हूं, तो कंपाइलर `set` मेथड पर त्रुटि देता है। क्यों? और आखिर `out` की जरूरत क्यों है? इसे किन स्थितियों में उपयोग करना चाहिए? यह Java के PECS (Producer Extends, Consumer Super) सिद्धांत से कैसे संबंधित है? कृपया समझाएं।