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

Kotlin中arrayOfNulls带初始化块报错:无法访问内部成员问题咨询

Kotlin:声明含Int类型List的数组时的错误解析

问题代码

尝试声明包含List<Int>的数组时使用了以下代码:

private val set = arrayOfNulls<List<Int>?>(10) { 
    mutableListOf<Int>() 
}

编译器报错信息

Line 3: Char 23: error: cannot access 'arrayOfNulls': it is internal in 'kotlin.collections'
private val set = arrayOfNulls<List?>(10) { mutableListOf() }

可正常运行的对比代码

不带初始化块的arrayOfNulls调用可以正常编译:

private val set = arrayOfNulls<Node?>(5)

错误原因

  1. 标准库对外暴露的arrayOfNulls无初始化块重载:Kotlin标准库提供给外部使用的arrayOfNulls只有一个版本,签名为fun <T> arrayOfNulls(size: Int): Array<T?>,它仅创建一个指定大小、所有元素为null的数组,不支持传入初始化lambda。
  2. 你调用的是内部函数:带初始化块的arrayOfNulls是Kotlin标准库的internal(内部可见)函数,仅在标准库内部代码中可用,外部项目无法访问,这就是编译器报错的核心原因。

正确实现方式

如果要创建每个元素都已初始化的MutableList<Int>数组,直接使用Array的公开构造函数即可:

private val set = Array(10) { mutableListOf<Int>() }

这个构造函数会遍历数组的每个索引,用传入的lambda初始化对应位置的元素,符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 05:39:58