توی کاتلین مفهوم استاتیک مثل جاوا وجود نداره. با این حال یه سری امکاناتی برای معرفی فیلد و متدهای استاتیک در نظر گرفته شده است.
در هر کلاسی میشه companion object تعریف کرد و داخل بلاک آن فیلدها و متدهای استاتیک تعریف کرد.
در کاتلین برای مقداردهی فیلدهایی که در ابتدای کلاس معرفی شده و قرار است در اواسط کلاس مقداردهی شوند، دو روش وجود دارد:
1. {...} by lazy
2. lateinit
{...} by lazy همون جا مقدار متغیر مشخص میشه اما به محض استفاده از آن متغیر مقداردهی می شود. حتما باید از نوع val باشه.
lateinit نمیتونه nullable باشه و حتما باید از نوع var باشد.
اگر کلاس viewModel دارای آرگومان باشد، در این صورت برای instance کردن آن باید کلاس فکتوری تعریف کنیم:
class ViewModelFactory(private val num:Int): ViewModelProvider.Factory{
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
if(modelClass.isAssignableFrom(MyViewModel::class.java)){
return MyViewModel(num) as T
}
throw IllegalArgumentException("Not Found")
}
}
این کلاس همیشه به همین فرمت نوشته میشه.
کاتلین با پیاده سازی فایل Standard.kt به تمامی کلاس ها این امکان را میدهد که از اسکوپ فانکشن ها استفاده کنند. اگر اسکوپ فانکشن ها رو دیکامپایل کنیم، توابع خاصی نیستند و به صورت ساده (با بررسی چند شرط) پیاده سازی شده اند.
"گوگل پلی سرویس" یک لایه نرم افزاری است که اپلیکیشن های اندروید رو به سرویس های گوگل متصل میکنه. گوگل پلی سرویس همیشه در بک گراند در حال اجرا است و مسائلی مثل پوش نوتیفیکیشن، لوکیشن و اینا رو مدیریت می کنه. با توجه به نیازمون توی اپلیکیشن، از dependency مربوطه برای گوگل پلی سرویس استفاده می شه. مثلا:
dependency مپس:
"com.google.android.gms:play-services-maps:17.0.0"
dependency لوکیشن:
"com.google.android.gms:play-services-location:18.0.0"
لیست dependencyهای گوگل پلی سرویس
"گوگل موبایل سرویس (GMS)" یک سری از اپلیکیشن ها و APIهای گوگل هست که روی گوشی های اندرویدی نصب میشه (مثل کروم، جیمیل، یوتیوب، گوگل مپ و ...) و به عملکرد مناسب گوشی کمک میکنه.