java – Kotlin:泛型方法和for循环请求iterator()
发布时间:2020-12-15 04:38:57 所属栏目:Java 来源:网络整理
导读:这是一个简单的泛型方法,并且将forgs中的args传递给for循环会导致错误: for-loop range must have and iterator() method fun main(args: ArrayString) { val arr: IntArray = intArrayOf(1,2,3,4) val charA: CharArray = charArrayOf('a','b','c','d') pr
这是一个简单的泛型方法,并且将forgs中的args传递给for循环会导致错误:
fun main(args: Array<String>) { val arr: IntArray = intArrayOf(1,2,3,4) val charA: CharArray = charArrayOf('a','b','c','d') printMe(arr) printMe(charA) } fun <T>printMe(args: T){ for (items in args){ println(items) } } 我如何让它迭代char []和数组的值 解决方法
Kotlin中的for循环按惯例工作,静态地查找名为iterator的运算符成员,该运算符成员必须返回可以迭代的东西,即依次包含operator和hasNext的东西.
这些成员上的operator修饰符需要指定该成员是否满足某些约定,即迭代约定. 由于args的类型为T,并且在每种可能的类型T中都没有迭代器成员,因此无法轻易迭代. 但是,您可以为printMe提供一个附加参数,它知道如何从T实例中获取迭代器,然后使用它来获取迭代器并迭代它: fun main(args: Array<String>) { val arr: IntArray = intArrayOf(1,'d') printMe(arr,IntArray::iterator) printMe(charA,CharArray::iterator) } fun <T> printMe(args: T,iterator: T.() -> Iterator<*>) { for (item in args.iterator()) { println(item) } } 这里T.() – >迭代< * GT;是一个表示function with receiver的类型.可以在T上调用该类型的实例,就像它们是它的扩展一样. 返回的迭代器本身就是一个操作符扩展函数Iterator< T> .iterator()= this,它只返回迭代器,因此允许使用for循环遍历迭代器. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |