Middle
70
questionbank

Каковы особенности работы с аннотациями в Kotlin?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

Аннотации в 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