Subclass Opt In Required
Начиная с Kotlin: 2.1
annotation class SubclassOptInRequired(val markerClass: KClass<out Annotation>)
Аннотация, которая помечает классы и интерфейсы, открытые для наследования, и требует явного согласия на реализацию и расширение таких объявлений.
При её применении любая попытка унаследовать целевое объявление вызовет запрос на явное согласие с соответствующим уровнем и сообщением.
Маркеры, требующие явного согласия на наследование, предназначены для использования в API, включая, помимо прочего, следующие случаи:
Безопасно использовать, но небезопасно реализовывать из-за дальнейшего развития API.
Безопасно использовать, но реализация сторонними разработчиками закрыта по внутренним или техническим причинам.
Безопасно использовать, но реализация требует осторожности или может быть ненадёжной.
Безопасно использовать, но контракт может быть ослаблен в будущем несовместимым с предыдущими версиями образом для внешних реализаций.
В отличие от обычной аннотации RequiresOptIn, есть три способа выполнить требование о явном согласии на наследование:
Аннотировать объявление аннотацией-маркером, чтобы требование распространялось дальше.
Аннотировать объявление аннотацией OptIn, чтобы принять предоставляемые гарантии без дальнейшего распространения требования.
Аннотировать объявление аннотацией SubclassOptInRequired с тем же классом-маркером, чтобы требование распространялось дальше только на наследование.
Эту аннотацию можно использовать только для открытых и абстрактных классов, а также не-fun интерфейсов. Любое другое использование, разрешённое целевым типом аннотации CLASS, приводит к ошибке компиляции.
См. также
подробное описание семантики явного согласия и правил распространения.
Свойства
Начиная с Kotlin: 2.1
val markerClass: Array<out KClass<out Annotation>>
задаёт аннотацию-маркер, для которой требуется явное согласие.
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-subclass-opt-in-required/index.html