XXX<U, in T: U> 在科特林中是什么意思

what does XXX<U, in T: U> mean in kotlin

TimeoutCoroutine<U, in T: U> 在 kotlin 中是什么意思。我在读这个

private class TimeoutCoroutine<U, in T: U>(
    @JvmField val time: Long,
    uCont: Continuation<U> // unintercepted continuation
) 

但是实在不明白这个是什么意思。有人可以解释吗?非常感谢!

TimeoutCoroutine 是一个 generic class 需要两种类型的人 :

  • U,随便你怎么说

  • 直接或间接扩展U类型的T(由T: U定义)

  • in关键字,根据documentation

    It makes a type parameter contravariant, meaning it can only be consumed and never produced.

    因此您将能够使用 T 类型,但永远不会创建它的实例或在方法中返回它。

例如:

class Foo<in T> {
    fun bar(a: T) = a
}

bar 函数将向您显示一个错误,指出此方法使用 T 类型 out 位置而不是 in 因为您返回的对象具有 T 类型