Kotlin中List调用add方法报错‘Unresolved reference: add’求助
问题解决:无法调用List的add方法
问题根源
- Kotlin里的
List是只读集合,压根没有add方法,只有MutableList这种可变集合才支持添加元素的操作。 - 你的
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
相关产品推荐
相关产品推荐

