AbstractCoroutineContextKey所在位置是kotlin.coroutines.AbstractCoroutineContextKey,其相关用法介绍如下。

用法:

@ExperimentalStdlibApi abstract class AbstractCoroutineContextKey<B : Element, E : B> : 
    Key<E>

CoroutineContext.Key 的基类与多态CoroutineContext.Element 实现相关联。多态元素实现意味着将其getminusKey分别委托给getPolymorphicElementminusPolymorphicKey

可以使用元素键及其超类型键从协程上下文中提取多态元素。多态元素示例:

open class BaseElement : CoroutineContext.Element {
    companion object Key : CoroutineContext.Key<BaseElement>
    override val key: CoroutineContext.Key<*> get() = Key
    // It is important to use getPolymorphicKey and minusPolymorphicKey
    override fun <E : CoroutineContext.Element> get(key: CoroutineContext.Key<E>): E? = getPolymorphicElement(key)
    override fun minusKey(key: CoroutineContext.Key<*>): CoroutineContext = minusPolymorphicKey(key)
}

class DerivedElement : BaseElement() {
    companion object Key : AbstractCoroutineContextKey<BaseElement, DerivedElement>(BaseElement, { it as? DerivedElement })
}
// Now it is possible to query both `BaseElement` and `DerivedElement`
someContext[BaseElement] // Returns BaseElement?, non-null both for BaseElement and DerivedElement instances
someContext[DerivedElement] // Returns DerivedElement?, non-null only for DerivedElement instance

参数

B- 多态元素的基类

baseKey- 基本键的一个实例

E- 与当前键关联的元素类型

safeCast- 一个可以安全地转换抽象的函数CoroutineContext.Element到混凝土E类型并返回元素,如果它是一个子类型E或者null否则。