Что означает ключевое слово out в Kotlin и как его использовать с дженериками?
مرحباً! بدأت تعلم Kotlin بعد Java وواجهت بناء غير مفهوم بالنسبة لي. في Java اعتدت على الأدوية (generics) مع wildcard مثل `? extends T` و `? super T`. لكن في Kotlin أرى الكلمات المفتاحية `in` و `out` مباشرة في تعريف الكلاس.
على سبيل المثال، صادفت هذا الكود:
```kotlin
interface Source {
fun get(): T
}
```
ماذا يعني `out` قبل `T`؟ جربت كتابة كلاس خاص بي بدون `out`:
```kotlin
class Box(private val item: T) {
fun get(): T = item
fun set(newItem: T) { /* ... */ }
}
```
وكل شيء يعمل. لكن إذا أضفت `out`، فإن المترجم يشتكي من الدالة `set`. لماذا؟ وما فائدة `out` أصلاً؟ في أي الحالات يجب استخدامه؟ كيف يرتبط هذا بمبدأ PECS (Producer Extends, Consumer Super) من Java؟ اشرح لي، من فضلك، بأمثلة بسيطة حتى أفهم متى ولماذا أستخدم `out` في Kotlin.
<<>>
ما هو out في Kotlin: إعلان التباين (declaration-site variance)
الكلمة المفتاحية