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

Kotlin中List调用add方法报错‘Unresolved reference: add’求助

问题解决:无法调用List的add方法

问题根源

  1. Kotlin里的List是只读集合,压根没有add方法,只有MutableList这种可变集合才支持添加元素的操作。
  2. 你的defects字段不仅是只读的List,还初始化为null,直接调用方法会同时踩“无add方法”和“空指针”两个坑。

解决方案

直接把defects改成可变集合并初始化,同时利用内部类的特性简化代码:

class CarModel(val brand: Brand, val modelName: String, val version: Int){
    // 替换成MutableList并初始化空集合,避免空值问题
    var defects: MutableList<CarDefects> = mutableListOf()

    inner class Car(val model: CarModel, val manufactureYear: Int, val engineSerialNum: String){
    }
    
    // 内部类可以直接访问外部类的成员,不用在构造函数传carModel
    inner class CarDefects(val affectedYears: Array<Int>, val defectCode: String ) {
        init{
            // 直接把当前实例加入defects集合
            defects.add(this)
        }
    }
}

如果一定要保留构造函数传入carModel的写法,修改后的代码如下:

class CarModel(val brand: Brand, val modelName: String, val version: Int){
    var defects: MutableList<CarDefects> = mutableListOf()

    inner class Car(val model: CarModel, val manufactureYear: Int, val engineSerialNum: String){
    }
    
    inner class CarDefects(var carModel: CarModel, val affectedYears: Array<Int>, val defectCode: String ) {
        init{
            carModel.defects.add(this)
        }
    }
}

特殊情况处理(不推荐)

如果必须让defects保持可空状态,需要做空安全判断+类型转换:

init {
    carModel.defects?.let { 
        if (it is MutableList) {
            it.add(this)
        }
    }
}

这种写法不够简洁,还是推荐直接初始化可变集合,从根源避免问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 14:45:40