lazy و lateinit در کاتلین
دوشنبه, ۶ ارديبهشت ۱۴۰۰، ۰۷:۵۱ ق.ظ
در کاتلین برای مقداردهی فیلدهایی که در ابتدای کلاس معرفی شده و قرار است در اواسط کلاس مقداردهی شوند، دو روش وجود دارد:
1. {...} by lazy
2. lateinit
{...} by lazy همون جا مقدار متغیر مشخص میشه اما به محض استفاده از آن متغیر مقداردهی می شود. حتما باید از نوع val باشه.
lateinit نمیتونه nullable باشه و حتما باید از نوع var باشد.
مثالی از by lazy:
private val viewModel by lazy {
ViewModelProvider(this).get(MyViewModel::class.java)
}
راه کوتاه تر (معادل کد بالا):
private val viewModel : MyViewModel by viewModels()
ویومدل همراه با کلاس فکتوری:
val viewModelFactory = ViewModelFactory(8)
val viewModel = ViewModelProvider(this, viewModelFactory)
.get(MyViewModel::class.java)
و یا:
private val delegatedViewModel: MyViewModel by viewModels {
ViewModelFactory(8)
}
برای استفاده از این راه حل های کوتاه در اکتیویتی و فرگمنت باید لایبرری های KTX (برای فرگمنت و اکتیویتی) رو اضافه کنیم. این کتابخانه ها اکستنشن هایی هستند که کدنویسی را راحت تر می کنند. لیست کتابخانه های KTX
۰۰/۰۲/۰۶