为啥 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&lt;T&gt; 类不实现Iterable&lt;T&gt;

快速查看documentation 会发现它也已经有一个iterator() 方法。

【问题讨论】:

无法为数组实现泛型函数的解决方案是尽可能使用List 接口 【参考方案1】:

Kotlin 旨在与 Java 完全互操作。 Array&lt;X&gt; 在运行时和从 Java 的角度来看都是 X[]。 Java 数组没有实现Iterable,所以 Kotlin 数组(实际上是相同的)也没有实现。

我们可以通过创建一个与 Java 数组无关的独立类来使我们的数组实现 Iterable。但是,为了保持与 Java 的兼容性,我们必须执行从这种类型到 Java 数组的隐式转换并返回。由于性能开销和不明确的对象身份语义,隐式转换通常不是完美的方法。在这里,它们也只能解决一半的问题,因为在从 Java 调用 Kotlin 代码时,您仍然需要手动“装箱”数组。这就是为什么这种解决方案不被认为是可行的。

【讨论】:

添加:asIterable 会给你一个包装器对象 Iterable 除了asIterable,还有asList

以上是关于为啥 Kotlin Array<T> 不实现 Iterable<T>的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin基础-泛型

如果使用“+”运算符添加列表,为啥 Kotlin 会将 List<List<Int>> 类型的列表更改为 List<Any>?

Kotlin入门到精通(实战)数组的创建和操作详解

Kotlin入门到精通(实战)数组的创建和操作详解

Kotlin——数组

深入kotlin - KClass 特性深入研究