我在理解 Kotlin 类时遇到一些问题。
internal class TransformingSequence<T, R>
constructor(private val sequence: Sequence<T>, private val transformer: (T) -> R) : Sequence<R> {
override fun iterator(): Iterator<R> = object : Iterator<R> {
val iterator = sequence.iterator()
override fun next(): R {
return transformer(iterator.next())
}
override fun hasNext(): Boolean {
return iterator.hasNext()
}
}
internal fun <E> flatten(iterator: (R) -> Iterator<E>): Sequence<E> {
return FlatteningSequence<T, R, E>(sequence, transformer, iterator)
}
}
在上面的代码中,我不明白 iterator() 函数在做什么。看起来该函数继承自 Iterator 接口,并返回一个继承 Iterator 接口的对象(?)...?我不明白 'val iterator =equence.iterator()' 的含义。有人可以帮忙吗? 预先感谢您。
这是一个对象表达式。它创建
Iterator
接口的匿名实现并返回此类的实例。
花括号内有一个标准的类定义,它可以从外部范围访问变量。因此,
val iterator = sequence.iterator()
只是在这个类中创建一个属性。
此代码相当于:
internal class TransformingSequence<T, R>
constructor(private val sequence: Sequence<T>, private val transformer: (T) -> R) : Sequence<R> {
override fun iterator(): Iterator<R> = MyIterator(sequence, transformer)
...
}
class MyIterator<T, R>(
sequence: Sequence<T>,
private val transformer: (T) -> R
) : Iterator<R> {
val iterator = sequence.iterator()
override fun next(): R {
return transformer(iterator.next())
}
override fun hasNext(): Boolean {
return iterator.hasNext()
}
}
从高层角度来看,此类将一个迭代器包装在另一个迭代器中,并动态转换所有项目。