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

如何用泛型参数声明函数合并相似的Kotlin列表处理函数

当然可以用单一泛型函数解决重复代码问题!

你遇到的情况是典型的泛型适用场景——两个函数逻辑完全一致,只是处理的列表元素类型不同,这时用泛型函数就能完美复用代码,同时保持类型安全。

为什么MutableList<Any>?不行?

首先得解释下为什么你尝试的MutableList<Any>?不被接受:Kotlin的泛型默认是不变的,也就是说MutableList<String>并不是MutableList<Any>的子类型。如果允许这样的转换,你可能会不小心往原本只能存String的列表里加入Int元素,破坏类型安全,所以编译器会直接拒绝这种写法。

解决方案:泛型函数

只需要把函数定义改成泛型版本,就能兼容任意类型的MutableList:

fun <T> displayTotalSelected(btn: ListItemButton, items: MutableList<T>?, resId: Int) {
    // 用Kotlin标准库的isNullOrEmpty()替代手动判断,更简洁规范
    btn.text = if (items.isNullOrEmpty()) {
        getString(resId)
    } else {
        "${getString(resId)} (${items.size})"
    }
}

怎么使用这个函数?

调用的时候完全不需要额外操作,编译器会自动根据你传入的列表类型推断出T的具体类型:

// 传入MutableList<String>
displayTotalSelected(btn, stringList, R.string.some_res_id)
// 传入MutableList<Int>
displayTotalSelected(btn, intList, R.string.another_res_id)

这样你就不用维护两个几乎一模一样的函数了,代码更简洁也更易维护~

内容的提问来源于stack exchange,提问作者Big Star

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:15:44