与 Java 中一样,任何对象都Iterable可以在增强的 for 循环中使用。我认为 Kotlin 也同样如此,直到我发现事实kotlin.collections.Map并非如此Iterable。
来自标准库源代码:
public interface Map<K, out V> {
// ....
Run Code Online (Sandbox Code Playgroud)
如果不是,那么这样的事情怎么可能?:
val map: Map<String, Int> = HashMap()
// ...
for ((s, i) in map) {
println(s)
println(i)
// works perfectly
}
Run Code Online (Sandbox Code Playgroud)
最后,是否可以制作支持此语法的自定义类?如果是这样,怎么办?
我明白要迭代一个Map,我需要使用该entrySet()方法,然后使用Iterator结果Set.我觉得这个问题可能很愚蠢,但是,如何Map正确实施以便Iterator直接使用它是不可能的?据我所知,Map它不是一个集合,Iterator而是用于集合.但从逻辑上讲,它也不Map是键值对的集合(虽然它没有实现Collection接口)?