【发布时间】:2019-02-26 16:31:05
【问题描述】:
我试图了解 Kotlin 对泛型的理解,尤其是使用 in 和 out 关键字。我写了这篇简单的文章,希望能说明我的困惑。
这是看起来和工作正常的方法;
这里,IDE 提示说 for 循环正在迭代的项目的类型是 Shape。这很好。
上述方法的另一个版本,乍一看似乎不太正确(因为它是“消费者”)。但我想做的只是阅读一个形状列表,这就是from 中的全部内容。
这不起作用,根据规则可能是正确的,但我无法在这里连接点。这似乎是一个安全的操作。我还可以看到 Kotlin 将类型降低为“任何?”这解释了为什么这已经给出了编译器错误。有人可以在这里解释一下潜在的类型不安全吗?
【问题讨论】:
-
"Kotlin 提供了一个互补的方差注解:在。它使类型参数逆变:它只能被消费而不能被生产"
-
@TimCastelijns 谢谢,但我想了解其背后的原因。再一次,对我来说,这看起来像是一个安全的操作。或者我在这方面错了,但在这种情况下,我真的需要一个示例来可视化这种用法如何破坏语言的类型安全动态。
标签: generics kotlin covariance