Middle
Kotlin'da izohlar bilan ishlashning xususiyatlari qanday?
sobes.tech AI
AIdan javob
Kotlin'dagi izohlar Java'dagi izohlarga o'xshaydi, ammo ularning bir qator xususiyatlari mavjud:
- Sintaksis: Izohlar, ular qo'llaniladigan elementdan oldin joylashtiriladi,
@belgisidan foydalanilmaydi. - Runtime'da foydalanish: Standart holda, izohlar runtime'da saqlanmaydi. Ularni saqlash uchun
@Retention(AnnotationRetention.RUNTIME)meta-izohidan foydalanish kerak. - Turlar uchun qo'llash: Izohlar faqat sinflar, funksiyalar va mulklarga emas, balki turlarga ham qo'llanilishi mumkin (masalan,
@NonNull String). Buning uchuntypealiasishlatiladi. - Konstruktorlarni izohlash: Bir sinfning asosiy konstruktorini izohlash uchun
constructorkalit so'zi ishlatiladi. Ikkinchi darajali konstruktorlar uchun izoh to'g'ridan-to'g'ri ularning oldiga qo'yiladi. - Mulklarga va ularning accessorlariga izoh: Izohlar mulkga, uning getter'iga (
@get:) yoki setter'iga (@set:) qo'llanilishi mumkin. - Konstruktor parametrlariga izoh: Asosiy konstruktor parametrlariga qo'llanadigan izohlar, bu mulkni ham izohlashadi. Bu parametrni izohlash uchun
@param:ishlatiladi. - Funktsiya va metod parametrlariga izoh: Izohlar to'g'ridan-to'g'ri parametrdan oldin joylashtiriladi.
- Reflection bilan ishlash: Kotlin reflection (
kotlin-reflect) yordamida, agar@Retention(AnnotationRetention.RUNTIME)ishlatilgan bo'lsa, runtime'da izohlar haqida ma'lumot olish mumkin. - Qo'llash sohalari: Izohlar, maqsadni aniq ko'rsatish uchun prefikslar yordamida ma'lumot berishi mumkin:
@file:- fayl uchun@property:- mulk uchun@field:- mulk uchun yaratilgan maydon uchun@get:- mulk uchun getter uchun@set:- mulk uchun setter uchun@param:- konstruktor parametri uchun@setparam:- mulk setter parametri uchun@delegate:- delegat maydoni uchun@use-site:- foydalanish joyini ko'rsatish uchun, maqsad aniq ko'rsatilmagan hollarda
Misol uchun, izoh yaratish va foydalanish:
// Anotatsiya ta'rifi
@Retention(AnnotationRetention.RUNTIME)
annotation class MyAnnotation(val value: String)
// Anotatsiyadan foydalanish
@MyAnnotation("Hello")
class MyClass {
@get:MyAnnotation("World")
val myProperty: String = "some value"
constructor(@param:MyAnnotation("ConstructorParam") param: Int) {
// ...
}
fun myFunction(@MyAnnotation("FunctionParam") param: String) {
// ...
}
}