Аннотация @Target

Аннотация @Target определяет, к каким элементам программы может быть применена пользовательская аннотация. Она принимает один или несколько значений из перечисления AnnotationTarget, которые указывают допустимые цели применения аннотации.

Импорт

kotlinimport kotlin.annotation.AnnotationTarget
import kotlin.annotation.Target

Синтаксис

kotlin@Target(vararg allowedTargets: AnnotationTarget)
annotation class MyAnnotation

Пример

Создадим аннотацию, которая может применяться только к классам и функциям:

kotlin@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION)
annotation class MyAnnotation

@MyAnnotation
class MyClass {
  @MyAnnotation
  fun myMethod() {}
}

Пример

Создадим аннотацию только для свойств класса:

kotlin@Target(AnnotationTarget.PROPERTY)
annotation class PropertyInfo

class User {
  @propertyInfo
  val name: String = "John"
  
  @propertyInfo
  var age: Int = 25
}

Пример

Использование всех возможных целей аннотации:

kotlin@Target(
  AnnotationTarget.CLASS,
  AnnotationTarget.ANNOTATION_CLASS,
  AnnotationTarget.PROPERTY,
  AnnotationTarget.FIELD,
  AnnotationTarget.LOCAL_VARIABLE,
  AnnotationTarget.VALUE_PARAMETER,
  AnnotationTarget.CONSTRUCTOR,
  AnnotationTarget.FUNCTION,
  AnnotationTarget.PROPERTY_GETTER,
  AnnotationTarget.PROPERTY_SETTER,
  AnnotationTarget.TYPE,
  AnnotationTarget.EXPRESSION,
  AnnotationTarget.FILE,
  AnnotationTarget.TYPEALIAS
)
annotation class UniversalAnnotation

Пример

Попытка применить анноцию не к тому элементу вызовет ошибку компиляции:

kotlin@Target(AnnotationTarget.CLASS)
annotation class ClassOnly

@ClassOnly
class ValidClass {}

// Ошибка компиляции: эта аннотация не может быть применена к функции
// @ClassOnly
// fun invalidFunction() {}

Допустимые значения AnnotationTarget

Доступные цели для аннотаций:

kotlinCLASS                // Классы, объекты, интерфейсы
ANNOTATION_CLASS     // Аннотации
PROPERTY             // Свойства
FIELD                // Поля (переменные класса)
LOCAL_VARIABLE       // Локальные переменные
VALUE_PARAMETER      // Параметры функций
CONSTRUCTOR          // Конструкторы
FUNCTION             // Функции (не члены класса)
PROPERTY_GETTER      // Геттеры свойств
PROPERTY_SETTER      // Сеттеры свойств
TYPE                 // Типы
EXPRESSION           // Выражения
FILE                 // Файлы
TYPEALIAS            // Псевдонимы типов

Смотрите также

  • ключевое слово annotation,
    которое используется для объявления аннотаций
  • ключевое слово retention,
    которое определяет политику сохранения аннотации
  • ключевое слово repeatable,
    которое позволяет многократное применение аннотации
  • ключевое слово class,
    которое используется для объявления классов