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否則。