Аннотации в 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: - для использования сайта, когда четко указать цель невозможно
Пример создания и использования аннотации:
kotlin