您好,我正在try 添加自定义迭代器,例如,添加到来自Kotlin包的Pair类,以便能够在for循环中使用该类的实例

让我们假设这是我想要做的事情:

val pair: Pair<Int, String> = Pair(1, "sample data")
for (element in pair) {
println(element)
}

我知道有很多其他方法可以打印Pair中的元素,但我特别希望能够在for循环中使用Pair,并且需要通过Next()和hasNext()方法实现将Iterator()对象添加到Pair类

推荐答案

您可以通过为对象提供iterator()运算符来实现这一点,无论是作为成员函数还是扩展函数.使用扩展函数的示例:

fun main() {
    val pair: Pair<Int, String> = Pair(1, "sample data")
    for (element in pair) {
        println(element)
    }
}

operator fun <T> Pair<T, T>.iterator(): Iterator<T> = listOf(first, second).iterator()

但是,您需要注意的是,通过这种方式您会部分地丢失强类型.element只能是所有元素的公共超类型,在大多数情况下只是Any?.

你可以在官方文档中阅读更多关于这一点的内容:https://kotlinlang.org/docs/control-flow.html#for-loops

Kotlin相关问答推荐

使用数据存储首选项Kotlin Jetpack Compose

Kotlin是否针对范围和进度优化sum()?

禁用 Gradle执行消息

如何更改默认推断没有接收者的函数类型?

Spring Boot Kotlin 数据类未使用 REST 控制器中的默认值初始化

使用调度程序运行异步 Kotlin 代码

KMM:编译失败:意外的 IrType 类型:KIND_NOT_SET

如何从kotlin中的ArrayList中删除所有元素

SpringBoot 2.5.0 对于 Jackson Kotlin 类的支持,请在类路径中添加com.fasterxml.jackson.module: jackson-module-kotlin

Kotlin 方法重载

Kotlin 协程中的 Dispatchers.Main 和 Dispatchers.Default 有什么区别?

如何在 Kotlin 中使用 volatile

如何在 Kotlin 中创建一个打开新活动(Android Studio)的按钮?

Mockito 的 argThat 在 Kotlin 中返回 null

如何在Spring Boot应用程序上启用承载身份验证?

大小写敏感性 Kotlin / ignoreCase

android Room 将 Null 作为非 Null 类型返回

具有泛型param的Kotlin抽象类和使用类型param的方法

查找是否在列表中找到具有特定属性值的元素

访问Kotlin中的属性委托