Sobes.tech
Middle

Хусусиятҳои кор бо ёддоштҳо дар Kotlin чист?

sobes.tech AI

Ҷавоб аз AI

Аннотації в Kotlin схожі з аннотаціями в Java, але мають ряд особливостей:

  • Синтаксис: Аннотації ставляться перед елементом, до якого застосовуються, без символу @.
  • Використання в run-time: За замовчуванням аннотації не зберігаються в run-time. Для збереження потрібно використовувати мета-анотацію @Retention(AnnotationRetention.RUNTIME).
  • Застосування до типу: Аннотації можна застосовувати не лише до класів, функцій і властивостей, а й до типів (наприклад, @NonNull String). Для цього використовується typealias.
  • Аннотирование конструкторів: Для аннотирования основного конструктора класу використовується ключове слово constructor. Для вторинних конструкторів аннотація ставиться безпосередньо перед ними.
  • Аннотирование властивостей і їх аксесорів: Аннотації можна застосовувати до самої властивості, її геттера (@get:) або сеттера (@set:).
  • Аннотирование параметрів конструктора для властивостей: Аннотації, що застосовуються до параметрів основного конструктора, які одночасно є властивостями, аннотируют ці властивості. Для аннотирования самого параметра використовується @param:.
  • Аннотирование параметрів функцій і методів: Аннотації застосовуються безпосередньо перед параметром.
  • Робота з аннотаціями в reflection: Kotlin reflection (бібліотека kotlin-reflect) дозволяє отримувати інформацію про аннотації в run-time за наявності @Retention(AnnotationRetention.RUNTIME).
  • Область застосування: Аннотації можуть мати цільове оголошення за допомогою префіксів:
    • @file: - для файлу
    • @property: - для властивості
    • @field: - для поля, згенерованого для властивості
    • @get: - для геттера властивості
    • @set: - для сеттера властивості
    • @param: - для параметра конструктора
    • @setparam: - для параметра сеттера властивості
    • @delegate: - для делегатного поля
    • @use-site: - для використання сайту, коли важко точно вказати ціль

Приклад створення та використання аннотації:

// Визначення аннотації
@Retention(AnnotationRetention.RUNTIME)
annotation class MyAnnotation(val value: String)

// Використання аннотації
@MyAnnotation("Hello")
class MyClass {

    @get:MyAnnotation("World")
    val myProperty: String = "якась значення"

    constructor(@param:MyAnnotation("ConstructorParam") param: Int) {
        // ...
    }

    fun myFunction(@MyAnnotation("FunctionParam") param: String) {
        // ...
    }
}