东莞网站建设费用,品牌网站设计打造,如何自己写一个网页,小程序商店app情形#xff1a;
网络请求json数据#xff0c;本地创建实体类接收json#xff0c;实体类中的变量为var可变类型#xff0c;将实体类的变量赋值给一个局部变量#xff0c;将局部变量作为参数传给其它方法时#xff0c;遇到一个问题 #xff1a; ”Smart cast to String …情形
网络请求json数据本地创建实体类接收json实体类中的变量为var可变类型将实体类的变量赋值给一个局部变量将局部变量作为参数传给其它方法时遇到一个问题 ”Smart cast to String is impossible, because data.name is a mutable property that could have been changed by this time“ 认为这个变量是可变的传参这个时候可能是null了做非空判断
即网络获取 json 定义 data class LocalData(var name)
val localDataBean Gson().fromJson(json,Object:TypeTokenLocalData(){}.Type())
function sS(ss:String){}
var ss localDataBean.name
sS(ss)
这种情况下就会认为 ss可能在这个时间已经变成null了无法传递给函数 sS
原因
对象中的可变变量此刻可能为null而函数需要的是非null变量 即使是这样 var temp if(data.name ! null){ data.name} else
依然会有这个问题因为无法确定if语句块在判断之后变量再赋值会不会变为null
解决
只能这样写var temp data.name if(temp null){temp }要先赋值再判断。
只有这样才能确定在if语句块判断之后变量不会变为null