تكرار السؤال: …
الإجابة المختصرة
يقوم المترجم تلقائيًا بتحويل النوع (Cast) بعد التحقق منه بواسطة is دون حاجة لتحويل صريح يدويًا.
الشرح
عند فحص نوع متغير باستخدام is أو عند التحقق من عدم كونه null، يقوم المترجم بتتبعه وتحويله تلقائيًا إلى النوع الأضيق داخل نطاق الفحص (scope). يعمل Smart Cast مع المتغيرات المحلية من نوع val والخصائص الخاصة التي يضمن المترجم عدم تعديلها بين وقت الفحص ووقت الاستخدام.
مثال بالكود
fun printLength(obj: Any) {
if (obj is String) {
// Smart Cast تلقائي إلى String
println(obj.length)
}
}
val text: String? = "Hello"
if (text != null) {
println(text.length) // Smart cast من String? إلى String
}أخطاء شائعة
- توقع عمل Smart Cast مع متغيرات var أو خصائص مفتوحة (open properties) يمكن تعديلها بواسطة thread آخر بين وقت الفحص والاستخدام.
- استخدام Unsafe Cast (as) بدلاً من Safe Cast (as?) عند وجود احتمال لعدم تطابق النوع.