为啥 Kotlin Array<T> 不实现 Iterable<T>
Posted
技术标签:
【中文标题】为啥 Kotlin Array<T> 不实现 Iterable<T>【英文标题】:Why doesn't Kotlin Array<T> implement Iterable<T>为什么 Kotlin Array<T> 不实现 Iterable<T> 【发布时间】:2016-06-26 14:53:48 【问题描述】:为什么Kotlin
中的Array<T>
类不实现Iterable<T>
?
快速查看documentation 会发现它也已经有一个iterator()
方法。
【问题讨论】:
无法为数组实现泛型函数的解决方案是尽可能使用List
接口
【参考方案1】:
Kotlin 旨在与 Java 完全互操作。 Array<X>
在运行时和从 Java 的角度来看都是 X[]
。 Java 数组没有实现Iterable
,所以 Kotlin 数组(实际上是相同的)也没有实现。
我们可以通过创建一个与 Java 数组无关的独立类来使我们的数组实现 Iterable
。但是,为了保持与 Java 的兼容性,我们必须执行从这种类型到 Java 数组的隐式转换并返回。由于性能开销和不明确的对象身份语义,隐式转换通常不是完美的方法。在这里,它们也只能解决一半的问题,因为在从 Java 调用 Kotlin 代码时,您仍然需要手动“装箱”数组。这就是为什么这种解决方案不被认为是可行的。
【讨论】:
添加:asIterable
会给你一个包装器对象 Iterable
。
除了asIterable
,还有asList
。以上是关于为啥 Kotlin Array<T> 不实现 Iterable<T>的主要内容,如果未能解决你的问题,请参考以下文章
如果使用“+”运算符添加列表,为啥 Kotlin 会将 List<List<Int>> 类型的列表更改为 List<Any>?