Kotlin Academy · درس

معاملات النوع reified: الوصول إلى T وقت التشغيل

استخدم reified مع دوال inline لإجراء فحوصات الأنواع والتحويلات وقت التشغيل.

الدرس 3 من 413 خطوة

معاملات النوع reified: الوصول إلى T وقت التشغيل درس مجاني في Kotlin Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Kotlin Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Kotlin Academy 4 دروس في المجموع.

مشكلة محو الأنواع

يمحو Kotlin/JVM معلومات الأنواع العامة أثناء التشغيل. داخل دالة عامة مثل fun foo()، لا يمكنك كتابة 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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. دوال inline: إزالة الحمل الزائد لـ Lambda
  2. معدّلا noinline وcrossinline
  3. معاملات النوع reified: الوصول إلى T وقت التشغيل
  4. أنماط reified العملية: التحليل وDI والتسلسل
← العودة إلى Kotlin Academy