为什么kotlin.coroutines.CoroutineContext.Element继承自kotlin.coroutines.CoroutineContext

时间:2019-04-03 17:02:33

标签: kotlin kotlin-coroutines

CoroutineContext这样的构建器函数创建协程时,我们可以提供可选的launch

launch(Dispatchers.Unconfined) { // not confined -- will work with main thread
    println("Unconfined      : I'm working in thread ${Thread.currentThread().name}")
    delay(500)
    println("Unconfined      : After delay in thread ${Thread.currentThread().name}")
}

其中一个值为Dispatchers.Unconfined。我以为Dispatchers.Unconfined将从CoroutineContext继承而来。但是以一种非常复杂的方式,对我来说不是很清楚。添加了类层次结构的屏幕截图。

enter image description here

它继承自CoroutineContext.Element。这是CoroutineContext内部的嵌套接口。此嵌套接口继承了外部/父接口,CoroutineContext的所有有用实现都实现了此嵌套接口。

我不确定为什么要使用这种机制或在其他地方使用这种模式。嵌套接口AFAIK只能用于创建新的命名空间,例如Map.Entry。官方文档也说得很少,

    /**
     * An element of the [CoroutineContext]. An element of the coroutine context is a singleton context by itself.
     */

不确定An element of the coroutine context is a singleton context by itself.是什么意思。

我知道这是一个好奇心问题。因此不需要及时的响应。但任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

协程上下文是一组元素。协程上下文的元素本身就是单例上下文。这意味着,当将其视为一个集合(作为协程上下文)时,一个元素表示一个单元素集合(又称为单例)。