如何让Kotlin函数接受任意类型的ArrayList作为参数?
解决Kotlin泛型ArrayList类型不匹配问题
嘿,这个问题我刚学Kotlin的时候也踩过一模一样的坑!核心原因是Kotlin的泛型默认是不变的——ArrayList<Int>并不是ArrayList<Any>的子类,所以直接把ArrayList<Int>传给要求ArrayList<Any>的函数,肯定会报类型不匹配。
咱们只需要把你的函数改成泛型函数,就能让它接受任意类型的ArrayList了,具体改法如下:
1. 修改函数为泛型版本
把函数定义里的Any替换成泛型类型参数<T>,参数类型改成ArrayList<T>:
fun <T> randomize(array: ArrayList<T>) { // 这里写你的打乱逻辑,比如用Kotlin内置的shuffle扩展 array.shuffle() // 如果你想自己实现打乱逻辑,比如Fisher-Yates算法也可以: // for (i in array.size - 1 downTo 1) { // val j = (0..i).random() // array.swap(i, j) // } }
这里的<T>是一个类型占位符,代表这个函数可以处理任意类型的ArrayList,不管你传的是Int、String还是自定义数据类的列表,都能完美匹配。
2. 调用示例
现在你再调用这个函数就完全没问题了:
val arr = arrayListOf(1, 2, 3, 4) randomize(arr) // 编译器会自动推导T为Int类型 // 其他类型也一样 val strList = arrayListOf("a", "b", "c") randomize(strList)
额外小提示
其实Kotlin的标准库已经给MutableList(ArrayList是它的实现类)提供了现成的shuffle()扩展函数,你甚至不用自己写randomize函数,直接调用arr.shuffle()就能完成打乱操作啦!
内容的提问来源于stack exchange,提问作者Vijayendra
相关产品推荐
相关产品推荐

