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) {
// ...
}
}