Срок хранения в Kotlin
Пометка может исчезнуть после компиляции, остаться
в байткоде или дожить до запуска программы. Срок
задаёт аннотация @Retention на типе своей
метки через AnnotationRetention.
Класс AnnotationRetention.SOURCE оставляет метку
только в исходнике. После компиляции в class-файле
её уже нет - удобно для подсказок редактору и
генерации, которые смотрят на текст кода.
Метка «только для исходника» объявляется так:
@Retention(AnnotationRetention.SOURCE)
annotation class SourceOnly(val tag: String)
Класс AnnotationRetention.BINARY сохраняет пометку
в байткоде, но не обязана быть видимой стандартным
средствам во время выполнения. Так часто помечают
служебные типы для статического анализа:
@Retention(AnnotationRetention.BINARY)
annotation class BinaryTag(val tag: String)
Класс AnnotationRetention.RUNTIME оставляет метку
в собранном классе до запуска JVM. Это нужно, когда
внешние библиотеки или платформа позже читают
пометки с уже загруженного типа. Сам урок не
обращается к метке из кода программы - важен
лишь выбор срока при объявлении:
@Retention(AnnotationRetention.RUNTIME)
annotation class RuntimeTag(val tag: String)
@RuntimeTag("demo")
class Marker
fun main() {
println(Marker::class.simpleName)
}
Объявите три типа меток с одним строковым
параметром и разным @Retention:
SOURCE, BINARY и RUNTIME.
Повесьте каждую на свой пустой класс-заглушку.
На класс с меткой RUNTIME добавьте
main, который выводит простое имя
типа через ::class. Чтение полей
метки из программы не требуется.