معاملات النوع reified: الوصول إلى T وقت التشغيل
استخدم reified مع دوال inline لإجراء فحوصات الأنواع والتحويلات وقت التشغيل.
معاملات النوع reified: الوصول إلى T وقت التشغيل درس مجاني في Kotlin Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Kotlin Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
مشكلة محو الأنواع
يمحو Kotlin/JVM معلومات الأنواع العامة أثناء التشغيل. داخل دالة عامة مثل fun ، لا يمكنك كتابة T::class أو is T — إذ لا يعرف JVM ماهية T بعد الترجمة.
reified للحل
اجمع بين inline وreified في معامل النوع. وبما أن الدالة مضمنة، يستبدل المترجم النوع الفعلي في كل موضع استدعاء، مما يجعل T متاحًا بالكامل أثناء التشغيل.
inline fun <reified T> isInstance(value: Any): Boolean = value is T
val result = isInstance<String>("hello") // trueالتحقّق من النوع باستخدام is T
من دون reified، يتسبب is T في خطأ وقت الترجمة («يتعذّر التحقّق من مثيل لنوع جرى محوه»). ومع استخدامه، يعيد المترجم كتابة التحقّق باستخدام النوع الفعلي المقدَّم في موضع الاستدعاء.
inline fun <reified T> filterByType(list: List<Any>): List<T> =
list.filterIsInstance<T>()الحصول على KClass من T
يمكنك الحصول على KClass لمعامل النوع باستخدام T::class. يتيح ذلك إجراء عمليات تحقّق من النوع والإشارة إلى الأصناف التي تمرّرها إلى واجهات برمجية، من دون استخدام الانعكاس.
inline fun <reified T> className(): String = T::class.simpleName ?: "Unknown"
println(className<Int>()) // "Int"التحليل باستخدام reified
من الأنماط الشائعة إنشاء دالة مساعدة parseJson آمنة النوع، تتلقى الصنف الهدف تلقائيًا:
inline fun <reified T> parseJson(json: String): T =
jacksonObjectMapper().readValue(json, T::class.java)نمط ViewModel / Service Locator
غالبًا ما تستخدم حاويات حقن الاعتماديات reified لإرجاع المثيل الصحيح، من دون مطالبتك بتمرير وسيطة Class:
inline fun <reified T : ViewModel> Fragment.viewModel(): T =
ViewModelProvider(this)[T::class.java]استدعاء واجهات Java البرمجية باستخدام Class<T>
تتطلب العديد من واجهات Java البرمجية وسيطة من النوع Class. يتيح لك reified استدعاءها من دون إجبار المستدعين على تمرير الصنف صراحةً:
inline fun <reified T> Gson.fromJson(json: String): T =
fromJson(json, T::class.java)reified وقيود النوع
يمكنك الجمع بين reified والحدود العليا:
inline fun <reified T : Any> create(): T =
T::class.java.getDeclaredConstructor().newInstance()القيود
تعمل معاملات النوع reified فقط في دوال inline — وليس في الأصناف أو الواجهات أو الدوال غير المضمّنة. لا يمكنك استدعاء دالة reified باستخدام نوع غير معروف لا يُعرف إلا وقت التشغيل.
كيفية تنفيذ المترجم لذلك
في كل موضع استدعاء، يستبدل المترجم T بوسيط النوع الفعلي. ويحتوي الرمز الثنائي في موضع الاستدعاء على مراجع مباشرة إلى الصنف الملموس، من دون الحاجة إلى الانعكاس.
أمثلة من المكتبة القياسية
من دوال المكتبة القياسية التي تستخدم reified: filterIsInstance وemptyArray وarrayOf وtypeOf. تعمل هذه الدوال بدقة لأنها تجمع بين inline + reified.
اختبار سريع
لماذا يتطلب reified أن تكون الدالة inline؟
مراجعة: معاملات النوع reified
أهم النقاط:
- يجعل
reifiedمعامل النوع متاحًا وقت التشغيل، متجاوزًا محو النوع - يتطلب أن تكون الدالة
inline - يتيح استخدام
is TوT::classوT::class.javaداخل الدالة - يُستخدم في تحليل JSON الآمن النوع، ودوال المساعدة لحقن الاعتماديات، وواجهات برمجة التطبيقات التي تتعامل مع مراجع الأصناف
تعلم Kotlin مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 51
- الدروس
- 203
الأسئلة الشائعة
هل درس «معاملات النوع reified: الوصول إلى T وقت التشغيل» مجاني؟
نعم — نص درس «معاملات النوع reified: الوصول إلى T وقت التشغيل» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Kotlin Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
ماذا ستتعلم في «معاملات النوع reified: الوصول إلى T وقت التشغيل»؟
استخدم reified مع دوال inline لإجراء فحوصات الأنواع والتحويلات وقت التشغيل. تتمرن على Kotlin Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Kotlin Academy؟
لا تُشترط خبرة سابقة. Kotlin Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «معاملات النوع reified: الوصول إلى T وقت التشغيل»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Kotlin Academy هذا؟
نعم. كل درس في Kotlin Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- دوال inline: إزالة الحمل الزائد لـ Lambda
- معدّلا noinline وcrossinline
- معاملات النوع reified: الوصول إلى T وقت التشغيل
- أنماط reified العملية: التحليل وDI والتسلسل