Avatar ·

الفرق بين `*` و `Any` في الأدوية العامة في Kotlin: النجمة مقابل 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`؟ ومتى نستخدم أياً منهما؟ اشرحوا لي، من فضلكم.