context Of
Начиная с Kotlin: 2.2
context(context: A)
inline fun <A> contextOf(): A
Получает контекстный аргумент, получатель расширения или получатель-диспетчеризацию в области видимости, соответствующий указанному типу. Компилятор гарантирует, что существует как минимум одно такое значение. Если найдено несколько значений, приоритет отдается более вложенным областям видимости; в противном случае компилятор выдает ошибку неоднозначности.
При вызове contextOf всегда необходимо указывать аргумент типа, даже если тип можно вывести из контекста.
Примеры
fun main() {
//sampleStart
abstract class Logger { abstract fun log(message: String) }
class ConsoleLogger : Logger() { override fun log(message: String) = println(message) }
fun <A> withConsoleLogger(block: context(Logger) () -> A): A =
context(ConsoleLogger()) { block() }
withConsoleLogger {
contextOf<Logger>().log("start")
println("work")
contextOf<Logger>().log("end")
}
//sampleEnd
}
fun main() {
//sampleStart
abstract class Logger { abstract fun log(message: String) }
class ConsoleLogger : Logger() { override fun log(message: String) = println(message) }
fun <A> withConsoleLogger(block: Logger.() -> A): A =
with(ConsoleLogger()) { block() }
withConsoleLogger {
contextOf<Logger>().log("start")
println("work")
contextOf<Logger>().log("end")
}
//sampleEnd
}
© 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/context-of.html