Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗ktSpRfAn 145 of 299 menu
◀ ▶

Чтение пометки в Kotlin

Пометка с AnnotationRetention.RUNTIME остаётся на типе после сборки. Рефлексия Kotlin ищет такие метки на KClass и возвращает объект с полями, объявленными в annotation class.

Удобный способ - findAnnotation из kotlin.reflect.full: он даёт одну метку нужного типа или null, если её нет:

import kotlin.reflect.full.findAnnotation @Retention(AnnotationRetention.RUNTIME) annotation class Stage(val name: String) @Stage("alpha") class Pipeline fun main() { val tag = Pipeline::class.findAnnotation<Stage>() println(tag?.name) }

Если меток одного типа может быть несколько, смотрят коллекцию annotations у того же класса и берут первый подходящий элемент:

@Retention(AnnotationRetention.RUNTIME) annotation class Stage(val name: String) @Stage("beta") class Pipeline fun main() { val tag = Pipeline::class.annotations .filterIsInstance<Stage>() .first() println(tag.name) }

Параметры метки читают как обычные свойства Kotlin - без отдельного API для каждого поля:

import kotlin.reflect.full.findAnnotation @Retention(AnnotationRetention.RUNTIME) annotation class Owner(val team: String) @Owner("billing") class InvoiceJob fun main() { val owner = InvoiceJob::class.findAnnotation<Owner>() if (owner != null) { println(owner.team) } }

Объявите метку с параметром tier типа String и сроком RUNTIME. Повесьте её на класс CachePolicy. Из main выведите значение tier через рефлексию.

Сделайте метку с целым полем version и класс Schema с этой меткой. Получите метку через annotations и напечатайте число version.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить