Аннотации в Kotlin используются для добавления метаинформации к классам, свойствам, функциям, выражениям и параметрам. Они не выполняют прямого действия, но могут быть использованы компилятором, фреймворками или другими библиотеками для различной обработки.
Основные аспекты использования:
Синтаксис: Аннотации указываются перед элементом, к которому они применяются, в угловых скобках @. Если аннотация имеет параметры, они указываются в скобках после имени.
kotlin
Применение к различным элементам: Аннотации могут применяться к:
class):
kotlin
val, var):
kotlin
fun):
kotlin
kotlin
kotlin
@Target(AnnotationTarget.TYPE)):
kotlin
Места применения (Use-site Targets): Для disambiguation того, к какому именно элементу применяется аннотация, когда их несколько (например, поле и геттер), используются use-site targets.
| Target | Описание |
|---|---|
@file: | Применяется ко всему файлу |
@property: | Применяется к свойству целиком |
@field: | Применяется к полю бэкинга (backing field) |
@get: | Применяется к геттеру свойства |
@set: | Применяется к сеттеру свойства |
@param: | Применяется к параметру конструктора |
@setparam: | Применяется к параметру сеттера свойства |
@delegate: | Применяется к инстансу делегированного свойства |
@receiver: | Применяется к типу получателя |
kotlin
Объявление пользовательских аннотаций: Собственные аннотации объявляются с ключевым словом annotation class. Параметры аннотации могут быть примитивными типами, строками, классами (в виде KClass), перечислениями, другими аннотациями или массивами этих типов.
kotlin
Мета-аннотации: Аннотации могут быть помечены мета-аннотациями, которые определяют их поведение и применимость.
@Target: Указывает, какие элементы могут быть аннотированы.@Retention: Указывает, на каком этапе жизни аннотация присутствует (SOURCE, BINARY, RUNTIME).@Repeatable: Позволяет применять аннотацию несколько раз к одному и тому же элементу.@MustBeDocumented: Указывает, что аннотация должна быть частью публичного API, генерируемого инструментом документации.kotlin
Аннотации широко используются в Kotlin для интеграции с JVM фреймворками (Spring, Android), сериализации (Kotlinx.serialization), тестирования (JUnit) и создания собственных библиотек, основанных на метаинформации.