Kotlin如何将非空对象值设为null?赋值报错求助
解决"Null can not be a value of Non null type"报错问题
问题根源
你遇到的报错核心原因很明确:在MainModel.Data类中,myObject被声明为非空的MyObject类型(var myObject: MyObject),而Kotlin的非空类型规则严格禁止将null赋值给这类变量,这就是触发报错的直接原因。
解决方案
要解决这个问题,我们需要从类型定义和代码逻辑两方面调整:
1. 修改Model类的可空性
首先把MainModel.Data中的myObject改为可空类型,只需要在类型后面加个问号?,这样它就合法接受null值了:
data class MainModel( @SerializedName("data") var data: ArrayList<Data>, @SerializedName("message") var message: String, @SerializedName("status") var status: Int ) { data class Data( @SerializedName("myObject") var myObject: MyObject? // 改为可空类型 ) { data class MyObject( @SerializedName("key1") var key1: String, @SerializedName("key2") var key2: String, ) } }
2. 简化赋值逻辑
修改完Model后,你原来的判断代码可以用Kotlin的空安全调用简化,避免重复的非空断言!!,代码更简洁安全:
mMailModel?.myObject = null
这段代码的逻辑是:如果mMailModel不为null,就将它的myObject设为null,完全替代了原来的if判断,更符合Kotlin的语法习惯。
特殊场景处理(不能修改Model时)
如果因为某些限制无法修改Model类(比如是自动生成的代码),可以退而求其次,用一个"空占位符"的MyObject实例来模拟空值效果:
mMailModel?.myObject = MyObject("", "")
不过这种方式只是权宜之计,不如直接将字段改为可空类型规范,所以优先推荐修改Model的方案。
内容的提问来源于stack exchange,提问作者Jaimin Modi
相关产品推荐
相关产品推荐

