آموزش جاوا و اندروید

یادداشت های یک برنامه نویس معمولی

آموزش جاوا و اندروید

یادداشت های یک برنامه نویس معمولی

طبقه بندی موضوعی

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

 

موافقین ۰ مخالفین ۰ ۰۰/۰۲/۰۶
میم دال

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی