You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:05:21