Avatar ·

كيف تعمل الكلمة المفتاحية reified في Kotlin ولماذا هي ضرورية للـ generics؟

مرحبًا! بدأت مؤخرًا في تعلم Kotlin وواجهت مشكلة عند العمل مع الـ generics. في Java، اعتدت على أن النوع (type) يتم مسحه أثناء التنفيذ، ولا يمكن التحقق مما إذا كان الكائن هو نسخة من النوع T. لكن في Kotlin، رأيت أنه يمكن استخدام الكلمة المفتاحية reified لتجاوز هذا القيد. إليك مثال لا يعمل لدي: ```kotlin fun checkType(value: Any): Boolean { return value is T // خطأ في الترجمة: Cannot check for instance of erased type: T } ``` أريد كتابة دالة تتحقق مما إذا كان الكائن المُمرر هو من نوع معين تم تمريره كمعامل generic. على سبيل المثال، أريد استدعاء `checkType("hello")` للحصول على true، و `checkType("hello")` للحصول على false. سمعت أنه لهذا يجب استخدام `inline` و `reified`. لكن كيف يعمل ذلك بالضبط؟ لماذا لا تستطيع الـ generics العادية فعل ذلك؟ وماذا يحدث "تحت الغطاء" عندما أضيف reified؟ اشرح، من فضلك، مع أمثلة كود عن كيفية عمل ذلك بشكل صحيح.