Spec-Zone.ru › Kotlin 1.8

RequiresOptIn

kotlin-stdlib / kotlin / RequiresOptIn
Требования к платформе и версии: JVM (1.3), JS (1.3), Native (1.3)
@Target([AnnotationTarget.ANNOTATION_CLASS]) annotation class RequiresOptIn

Указывает, что аннотированный класс аннотации является маркером API, для использования которого требуется явное включение.

Места вызова любого объявления, которое аннотировано таким маркером или упоминает в своей сигнатуре любое другое объявление, требующее включения, должны включать API, либо с помощью OptIn, либо путем аннотации самим этим маркером, что приводит к дальнейшему распространению требования включения.

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

  • Экспериментальный API для публичной предварительной версии, который может изменить свою семантику или повлиять на двоичную совместимость.
  • Внутренние объявления, которые не должны использоваться за пределами библиотеки, но которые public по техническим причинам.
  • Хрупкий или деликатный API, для использования которого требуется большой опыт, и, следовательно, необходимо явное включение.

Заражение

Когда объявление помечено требованием включения, оно считается заразным, что означает, что все его использования или упоминания в других объявлениях потребуют явного включения. Правило для распространения следующее: если отмеченное объявление перестанет существовать, сломаются только места с явным включением (или соответствующее предупреждение). Это правило не подразумевает транзитивность, например, распространение не распространяется через инлайнинг, что делает это ответственность inline автора функции для правильной маркировки.

Области типов

Тип считается требующим включения, если он помечен маркером включения или внешнее объявление (класс или интерфейс) требует включения. Любое использование любого объявления, которое упоминает такой тип в своей сигнатуре, потребует явного включения, даже если оно не используется непосредственно в месте вызова и даже если такие объявления не требуют включения непосредственно.

Например, рассмотрим следующие объявления, которые помечены нераспространяемым включением:

@UnstableApi
class Unstable

@OptIn(UnstableApi::class)
fun foo(): Unstable = Unstable()

@OptIn(UnstableApi::class)
fun bar(arg: Unstable = Unstable()) {}

@OptIn(UnstableApi::class)
fun Unstable?.baz() {}

и соответствующие места вызова:

fun outerFun() {
    val s = foo()
    bar()
    null.baz()
}

Даже если места вызова не упоминают Unstable тип напрямую, соответствующее предупреждение или ошибка включения будут активированы в каждом месте вызова из-за заразного распространения. Обратите внимание, что распространение не является транзитивным, т.е. вызовы outerFun сами по себе не будут вызывать никаких дополнительных требований к включению.

Лексические области

Если тип требует включения, такое требование распространяется на его лексическую область и все его вложенные объявления. Например, для следующей области:

@UnstableApi
class Unstable {
    fun memberFun() = ...

    class NestedClass {
        fun nestedFun() = ...
    }
}

Любое использование Unstable, NestedClass, или их методов-членов потребует явного включения.

Переопределенные объявления

Маркеры включения также распространяются через наследование и реализацию интерфейсов. Если базовое объявление требует включения, его переопределение требует либо явного включения, либо распространения требования включения.

См. также документацию языка Kotlin для получения дополнительной информации.

Типы

Требования к платформе и версии: JVM (1.0), JS (1.0), Native (1.0)

Level

Степень диагностики, которая должна быть сообщена об использовании, которое не явно включило API, либо с помощью OptIn, либо путем аннотации соответствующей маркером аннотацией.

enum class Level

Конструкторы

Требования к платформе и версии: JVM (1.0), JS (1.0), Native (1.0)

<init>

Указывает, что аннотированный класс аннотации является маркером API, для использования которого требуется явное включение.

RequiresOptIn(
    message: String = "", 
    level: Level = Level.ERROR)

Свойства

Требования к платформе и версии: JVM (1.0), JS (1.0), Native (1.0)

level

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

val level: Level
Требования к платформе и версии: JVM (1.0), JS (1.0), Native (1.0)

message

сообщение, которое должно быть отображено при использовании API без явного включения, или пустая строка для сообщения по умолчанию. Сообщение по умолчанию: «Это объявление экспериментальное, и его использование должно быть помечено «Marker» или «@OptIn(Marker::class)»», где Marker — это маркер требования включения.

val message: String

© 2010–2023 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-requires-opt-in/

Spec-Zone.ru

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