【发布时间】:2018-01-08 04:18:57
【问题描述】:
当以 Java 互操作为目标时,惰性集合应该使用什么类型?
-
Sequence<T>对 Kotlin 调用者最有意义,因为它的扩展函数默认是惰性的,但会强制 Java 调用者处理 Kotlin 标准库类型并手动转换序列迭代器(序列不能扩展迭代!) -
Iterable<T>对于 Java 调用者来说是有意义的,因为 for 循环中的隐式使用,但会导致毫无戒心的 Kotlin 调用者由于非惰性扩展函数而意外放弃惰性 -
Stream<T>是 Java 和 Kotlin 调用者的最佳选择,但可能会有开销,并且是 Java 8+(Kotlin 目标为 6+)
【问题讨论】:
-
也许您可以在 Kotlin 中将 iterable 与
someIterable.asSequence()一起使用? -
这个世界正常工作,但留下了 - 如前所述 - 毫无戒心的调用者意外放弃懒惰的可能性。这个问题更倾向于图书馆的发展。
标签: kotlin lazy-evaluation kotlin-interop