Kotlin'da qanday anotatsiyalarni ishlatish mumkin?
sobes.tech AI
AIdan javob
Kotlin'dagi annotatsiyalar, sinflar, xususiyatlar, funksiyalar, ifodalar va parametrlar uchun meta ma'lumot qo'shish uchun ishlatiladi. Ular to'g'ridan-to'g'ri harakat qilmaydi, ammo kompilyator, ramkalar yoki boshqa kutubxonalar tomonidan turli ishlov berish uchun foydalanilishi mumkin.
Asosiy foydalanish jihatlari:
-
Sintaksis: Annotatsiyalar, ular qo'llaniladigan elementdan oldin joylashtiriladi,
@bilan boshlanadi. Agar annotatsiya parametrlar bilan bo'lsa, ular nomidan keyin qavs ichida ko'rsatiladi.@Deprecated("YangiFunction o'rniga foydalaning") fun oldFunction() { // ... } @JvmStatic fun staticMethod() { // ... } -
Turli elementlarga qo'llash: Annotatsiyalar quyidagi elementlarga qo'llanishi mumkin:
- Sinflar (
class):@Serializable class User(val name: String) - Xususiyatlar (
val,var):@Inject lateinit var userRepository: UserRepository - Funktsiyalar (
fun):@Test fun testSomething() { // ... } - Konstruktor/funcsiya parametrlar:
fun processUser(@NotNull user: User) { // ... } - Ifodalar:
fun calculate(@Ignore parameter: Int) { // ... } - Turlar (
@Target(AnnotationTarget.TYPE)):val list: @NotNull List<String> = emptyList()
- Sinflar (
-
Qo'llash joylari (Use-site Targets): Anotatsiyaning qaysi elementga qo'llanilishini aniqlash uchun, ular bir nechta bo'lsa (masalan, maydon va getter), use-site targets ishlatiladi.
Target Tavsifi @file:Butun faylga qo'llanadi @property:Xususiyatga to'liq qo'llanadi @field:Backing maydonga qo'llanadi @get:Xususiyat getter'iga qo'llanadi @set:Xususiyat setter'iga qo'llanadi @param:Konstruktor parametriga qo'llanadi @setparam:Setter parametriga qo'llanadi @delegate:Delegatsiyalangan xususiyatning instansiyasiga qo'llanadi @receiver:Qabul qiluvchi turga qo'llanadi class Example(@field:Inject val dependency: Dependency) { // @field:Inject 'dependency' maydoniga qo'llanadi } -
O'ziga xos annotatsiyalarni e'lon qilish: O'z annotatsiyalaringizni
annotation classkalit so'zi bilan e'lon qilasiz. Anotatsiya parametrlari primitiv turlar, satrlar, sinflar (KClass), enumlar, boshqa annotatsiyalar yoki bu turlar massivlari bo'lishi mumkin.annotation class MyAnnotation(val value: String, val count: Int = 0) @MyAnnotation("Salom", count = 5) class AnnotatedClass { // ... } -
Meta-annotatsiyalar: Anotatsiyalar, ularning xatti-harakatlari va qo'llanilishini belgilovchi meta-annotatsiyalar bilan belgilanishi mumkin.
@Target: Qaysi elementlar anotatsiya qilinishi mumkinligini ko'rsatadi.@Retention: Anotatsiyaning hayot davrida qaysi bosqichda bo'lishini ko'rsatadi (SOURCE,BINARY,RUNTIME).@Repeatable: Anotatsiyani bir nechta marta qo'llash imkonini beradi.@MustBeDocumented: Anotatsiya, hujjat ishlab chiqarish vositasi tomonidan yaratiladigan jamoat API ning bir qismi bo'lishi kerakligini ko'rsatadi.
@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION) @Retention(AnnotationRetention.RUNTIME) annotation class ProcessedByFramework
Kotlin'da anotatsiyalar JVM ramkalar bilan integratsiya qilish (Spring, Android), seriyalash (Kotlinx.serialization), test qilish (JUnit) va meta ma'lumotlarga asoslangan o'z kutubxonalarini yaratish uchun keng qo'llaniladi.