gpt4 book ai didi

generics - 是kotlin 'in'关键字的BUG吗?

转载 作者:行者123 更新时间:2023-12-02 13:34:54 24 4
gpt4 key购买 nike

看下面的代码。为什么第 2 行没有警告,而且我可以运行它而没有任何错误?

fun main() {
val testProducer: TestProducer<in Child> = TestProducer(22)
println(testProducer.get())
}

open class Parent

class Child : Parent()

class TestProducer<T>(private val data: T) {
fun get(): T = data
}

最佳答案

不,这不是错误。
in关键字:它是一个类型参数 逆变 : 只能消费,不能生产。

您可能会因为 in 的其他一般用途而感到困惑。关键字 - 在 for 循环中。

这里是所有地方in可以使用关键字:

  • 指定在 for 循环中迭代的对象
  • 用作中缀运算符以检查值是否属于定义“包含”方法的范围、集合或另一个实体
  • 用于相同目的的 when 表达式
  • 将类型参数标记为逆变

  • 引用资料 - generics , keyword-reference

    编辑1:

    正如评论中提到的, <in Child>意味着您可以将 Child 对象作为函数参数传递给它。但是当它返回像你的 get() 中的对象时函数,它们被视为 Any? .您的代码有效,因为 println接受 Any?作为参数。

    关于generics - 是kotlin 'in'关键字的BUG吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58449354/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com