في Kotlin، لا يمكنك تهيئة حقل val
(والذي يعادل final
في Java) في البناء (constructor) بقيمة محسوبة في وقت التشغيل (runtime). ولكن يمكنك استخدام حقل من نوع lateinit var
مع التأكد من تهيئته قبل استخدامه. إليك كيفية تحقيق ذلك:
kotlinimport kotlinx.coroutines.*
class MyClass {
lateinit var s: String
fun initialize() {
runBlocking {
s = async {
RemoteService.result()
}.await()
}
}
}
في هذا المثال، تم استخدام lateinit var
بدلاً من val
لحقل s
، مما يعني أنه يجب تهيئته قبل استخدامه. تم استخدام runBlocking
و async
من مكتبة Kotlin Coroutines للقيام بذلك بطريقة غير تزامنية (asynchronously)، حيث يتم استدعاء RemoteService.result()
بشكل غير تزامني ويتم انتظار النتيجة باستخدام await()
.
تأكد من استدعاء initialize()
في الوقت المناسب قبل استخدام حقل s
في الكود.
المزيد من المعلومات
بالطبع! في Kotlin، حقل val
يجب أن يتم تهيئته بقيمة عند إعلانه أو في الكونستركتور (constructor)، ولا يمكن تعديل قيمته بعد ذلك. وهذا يعني أنه لا يمكن تهيئة حقل val
بقيمة تحسب في وقت التشغيل.
وبما أن lateinit var
يستخدم لتعديل الحقل بعد التهيئة الأولية، يجب التحقق من تهيئته قبل الوصول إليه لتجنب UninitializedPropertyAccessException
. يمكنك استخدام مثل هذه التقنيات مع Kotlin Coroutines لتحقيق الهدف الذي تريده من تهيئة حقل val
بقيمة تحسب في وقت التشغيل.