Avatar ·

Что означает ключевое слово 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)

الكلمة المفتاحية