Spec-Zone.ru › Kotlin 2

SubclassOptInRequired

kotlin-stdlib/kotlin/SubclassOptInRequired

Начиная с Kotlin: 2.1

@Target(allowedTargets = [AnnotationTarget.CLASS])
annotation class SubclassOptInRequired(val markerClass: KClass<out Annotation>)

Аннотация, которая помечает классы и интерфейсы, открытые для наследования, и требует явного согласия на реализацию и расширение таких объявлений.

При её применении любая попытка унаследовать целевое объявление вызовет запрос на явное согласие с соответствующим уровнем и сообщением.

Маркеры, требующие явного согласия на наследование, предназначены для использования в API, включая, помимо прочего, следующие случаи:

  • Безопасно использовать, но небезопасно реализовывать из-за дальнейшего развития API.

  • Безопасно использовать, но реализация сторонними разработчиками закрыта по внутренним или техническим причинам.

  • Безопасно использовать, но реализация требует осторожности или может быть ненадёжной.

  • Безопасно использовать, но контракт может быть ослаблен в будущем несовместимым с предыдущими версиями образом для внешних реализаций.

В отличие от обычной аннотации RequiresOptIn, есть три способа выполнить требование о явном согласии на наследование:

  • Аннотировать объявление аннотацией-маркером, чтобы требование распространялось дальше.

  • Аннотировать объявление аннотацией OptIn, чтобы принять предоставляемые гарантии без дальнейшего распространения требования.

  • Аннотировать объявление аннотацией SubclassOptInRequired с тем же классом-маркером, чтобы требование распространялось дальше только на наследование.

Эту аннотацию можно использовать только для открытых и абстрактных классов, а также не-fun интерфейсов. Любое другое использование, разрешённое целевым типом аннотации CLASS, приводит к ошибке компиляции.

См. также

RequiresOptIn

подробное описание семантики явного согласия и правил распространения.

Свойства

markerClass

Начиная с 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API