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)
错误原因
- 标准库对外暴露的
arrayOfNulls无初始化块重载:Kotlin标准库提供给外部使用的arrayOfNulls只有一个版本,签名为fun <T> arrayOfNulls(size: Int): Array<T?>,它仅创建一个指定大小、所有元素为null的数组,不支持传入初始化lambda。 - 你调用的是内部函数:带初始化块的
arrayOfNulls是Kotlin标准库的internal(内部可见)函数,仅在标准库内部代码中可用,外部项目无法访问,这就是编译器报错的核心原因。
正确实现方式
如果要创建每个元素都已初始化的MutableList<Int>数组,直接使用Array的公开构造函数即可:
private val set = Array(10) { mutableListOf<Int>() }
这个构造函数会遍历数组的每个索引,用传入的lambda初始化对应位置的元素,符合你的需求。
内容的提问来源于stack exchange,提问作者proj
相关产品推荐
相关产品推荐

