我在理解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 = order.iterator()"是用于的.有人能帮忙吗? 提前感谢.

推荐答案

这是一个object expression.它创建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()
    
    private inner class MyIterator : Iterator<R> {
        val iterator = sequence.iterator()
        override fun next(): R {
            return transformer(iterator.next())
        }

        override fun hasNext(): Boolean {
            return iterator.hasNext()
        }
    }
}

从高级Angular 来看,此类将一个迭代器包装在另一个迭代器中,并动态转换所有项.每当我们从包装迭代器请求下一项时,它都会请求内部迭代器,转换该项并返回.

Kotlin相关问答推荐

如何在Kotlin中模拟www.example.com()?

解决Microronaut中多个可能的Bean候选者冲突

为什么 trySend 会发出假数据?

如何处理基于枚举提前返回的 forEach 循环,Kotlin 中的一条路径除外

如何在 Kotlin 中实现 Composition UML 关系?

关于 Kotlin 函数类型转换的问题

Picasso 回调

在 kotlin 中模拟伴随对象函数

AIDL 中的 Parcelize 注释:Incompatible types: Object cannot be converted to MyCustomObject

Kotlin 代码是如何编译成原生代码的?

Koin Android:org.koin.error.NoBeanDefFoundException

用mockk验证属性设置程序吗?

Kotlin使用运行时断言进行空判断?

Kotlin:子构造函数如何使用其父构造函数的辅助构造函数?

Kotlin协程无法处理异常

Kotlin out-projected 类型禁止使用

@StringRes、@DrawableRes、@LayoutRes等android注释使用kotlin参数进行判断

如何在 IntelliJ IDEA 中禁用粘贴时将 Java 转换为 Kotlin?

函数引用和lambdas

java.lang.NoClassDefFoundError:解析失败:Lkotlin/time/MonoClock