НОВИНКА!
Занимательная математика от Трепачёва. Присоединяйтесь к нам!
1288 of 1310 menu

Аннотация @Repeatable

Аннотация @Repeatable позволяет применять одну и ту же аннотацию несколько раз к одному элементу кода. Без этой аннотации компилятор выдаст ошибку при попытке использовать аннотацию более одного раза. Для работы @Repeatable необходимо объявить аннотацию-контейнер, которая будет хранить массив повторяемых аннотаций.

Импорт

import kotlin.annotation.AnnotationRetention import kotlin.annotation.AnnotationTarget import kotlin.annotation.Repeatable import kotlin.annotation.Retention import kotlin.annotation.Target

Синтаксис

@Target(AnnotationTarget.ANNOTATION_CLASS) @Retention(AnnotationRetention.SOURCE) public annotation class Repeatable

Пример

Создадим повторяемую аннотацию Tag для маркировки методов:

@Repeatable @Retention(AnnotationRetention.SOURCE) annotation class Tag(val name: String) annotation class Tags(vararg val values: Tag)

Пример

Применим аннотацию @Tag несколько раз к одному методу:

@Tag("important") @Tag("optimized") @Tag("v1.0") fun calculateSum(a: Int, b: Int): Int { return a + b }

Пример

Создадим повторяемую аннотацию для валидации полей:

@Repeatable @Retention(AnnotationRetention.RUNTIME) annotation class Validation(val rule: String) annotation class Validations(vararg val values: Validation) data class User( @Validation("min:3") @Validation("max:20") @Validation("required") val username: String, @Validation("email") @Validation("required") val email: String )

Пример

Использование повторяемых аннотаций для документации:

@Repeatable @Retention(AnnotationRetention.SOURCE) annotation class Todo(val task: String) annotation class Todos(vararg val values: Todo) @Todo("optimize algorithm") @Todo("add error handling") @Todo("write unit tests") fun processData(data: List<String>) { // implementation }

Пример

Доступ к повторяемым аннотациям через рефлексию:

@Repeatable @Retention(AnnotationRetention.RUNTIME) annotation class Author(val name: String) annotation class Authors(vararg val values: Author) @Author("John Doe") @Author("Jane Smith") class DocumentProcessor fun main() { val annotations = DocumentProcessor::class.annotations for (annotation in annotations) { println(annotation) } }

Результат выполнения кода:

@Authors(values=[@Author(name=John Doe), @Author(name=Jane Smith)])

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

  • ключевое слово annotation,
    для создания собственных аннотаций
  • ключевое слово target,
    для указания целей применения аннотаций
  • ключевое слово retention,
    для указания времени жизни аннотаций
  • ключевое слово class,
    для создания классов и аннотаций
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить