Аннотация @Target
Аннотация @Target определяет, к каким элементам программы
может быть применена пользовательская аннотация. Она принимает
один или несколько значений из перечисления AnnotationTarget,
которые указывают допустимые цели применения аннотации.
Импорт
import kotlin.annotation.AnnotationTarget
import kotlin.annotation.Target
Синтаксис
@Target(vararg allowedTargets: AnnotationTarget)
annotation class MyAnnotation
Пример
Создадим аннотацию, которая может применяться только к классам и функциям:
@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION)
annotation class MyAnnotation
@MyAnnotation
class MyClass {
@MyAnnotation
fun myMethod() {}
}
Пример
Создадим аннотацию только для свойств класса:
@Target(AnnotationTarget.PROPERTY)
annotation class PropertyInfo
class User {
@propertyInfo
val name: String = "John"
@propertyInfo
var age: Int = 25
}
Пример
Использование всех возможных целей аннотации:
@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
Пример
Попытка применить анноцию не к тому элементу вызовет ошибку компиляции:
@Target(AnnotationTarget.CLASS)
annotation class ClassOnly
@ClassOnly
class ValidClass {}
// Ошибка компиляции: эта аннотация не может быть применена к функции
// @ClassOnly
// fun invalidFunction() {}
Допустимые значения AnnotationTarget
Доступные цели для аннотаций:
CLASS // Классы, объекты, интерфейсы
ANNOTATION_CLASS // Аннотации
PROPERTY // Свойства
FIELD // Поля (переменные класса)
LOCAL_VARIABLE // Локальные переменные
VALUE_PARAMETER // Параметры функций
CONSTRUCTOR // Конструкторы
FUNCTION // Функции (не члены класса)
PROPERTY_GETTER // Геттеры свойств
PROPERTY_SETTER // Сеттеры свойств
TYPE // Типы
EXPRESSION // Выражения
FILE // Файлы
TYPEALIAS // Псевдонимы типов
Смотрите также
-
ключевое слово
annotation,
которое используется для объявления аннотаций -
ключевое слово
retention,
которое определяет политику сохранения аннотации -
ключевое слово
repeatable,
которое позволяет многократное применение аннотации -
ключевое слово
class,
которое используется для объявления классов