You need to enable JavaScript to run this app. Kotlin中用initialCapacity初始化ArrayList时报函数匹配错误
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中用initialCapacity初始化ArrayList时报函数匹配错误

问题根因

该编译错误的核心原因是调用ArrayList构造函数时错误使用了不存在的命名参数initialCapacity。
报错信息中列出的第三个重载(p0: Int)就是接收初始容量的构造函数,传入的容量数值本身逻辑是正确的,但由于Kotlin对Java映射的ArrayList类的这个构造函数,没有暴露可调用的initialCapacity命名参数,编译器无法完成参数匹配,因此抛出参数不匹配的提示。
这类问题属于常见的语法混淆,大多是把Kotlin顶层集合工厂函数的命名参数规则,和Java映射类的构造函数调用规则搞混导致的。

修复方案
  • 移除错误的命名参数,按位置传入容量值,同时显式指定ArrayList的泛型类型为Boolean,避免类型推断异常:
    将原代码行itemStates[index] = ArrayList(initialCapacity = capacity)修改为:
    itemStates[index] = ArrayList<Boolean>(capacity)
    
  • 如果习惯使用命名参数的写法,可以改用Kotlin提供的顶层集合工厂函数mutableListOf,该函数原生支持initialCapacity命名参数,对应写法为:
    itemStates[index] = mutableListOf<Boolean>(initialCapacity = capacity)
    
    该方法的底层返回实现同样是Java的ArrayList,和直接调用构造函数的运行效果完全一致。
修正后完整参考代码
internal class MyAdapter(private var itemList: List<Items>) :
        RecyclerView.Adapter<MyAdapter.MyViewHolder>() {

    private var itemStates: MutableMap<Int, ArrayList<Boolean>> = mutableMapOf()

    init {
        itemList.forEachIndexed { index, itemObject ->
            val capacity  = if(itemObject.getItemTYPE() == Item.ITEM_TYPE.FOOD) 3 else 5
            itemStates[index] = ArrayList<Boolean>(capacity)
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.08 17:45:09