如何在Kotlin中为已有类(如Pair)添加自定义迭代器
为Kotlin Pair类实现自定义迭代器支持for循环遍历
由于Kotlin标准库中的Pair是final类,无法直接修改源码,我们可以通过扩展函数为它添加符合要求的迭代器实现,让Pair实例能直接在for循环中遍历。
实现代码
// 为Pair添加迭代器扩展函数 operator fun <A, B> Pair<A, B>.iterator(): Iterator<Any?> { var currentIndex = 0 return object : Iterator<Any?> { // 判断是否还有未遍历的元素 override fun hasNext(): Boolean = currentIndex < 2 // 返回下一个元素,遍历完抛出规范异常 override fun next(): Any? { return when (currentIndex++) { 0 -> first 1 -> second else -> throw NoSuchElementException("Pair contains only 2 elements") } } } }
使用示例
fun main() { val pair: Pair<Int, String> = Pair(1, "sample data") for (element in pair) { println(element) } }
代码说明
- 用
operator关键字修饰扩展函数,这是Kotlin中让for循环识别迭代器的必要条件 - 迭代器内部通过
currentIndex变量跟踪遍历位置,从0开始计数 hasNext()方法判断当前是否还有可遍历的元素(Pair固定只有两个元素,所以判断currentIndex < 2)next()方法根据当前索引返回first或second属性,每次调用后索引自增;若索引超出范围,抛出NoSuchElementException,符合Iterator接口的规范
内容的提问来源于stack exchange,提问作者nanobot
相关产品推荐
相关产品推荐

