Sobes.tech
Junior

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:

  1. 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() {
        // ...
    }
    
  2. 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()
      
  3. 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
    }
    
  4. O'ziga xos annotatsiyalarni e'lon qilish: O'z annotatsiyalaringizni annotation class kalit 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 {
        // ...
    }
    
  5. 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.