可空值与非空值
最近公司项目中踩到一个java与kotlin混编的坑,原因就是kotlin中声明的非空变量调用了java中的方法返回的变量值,导致kotlin非空机制失效
用代码说明下这个问题
kotlin代码
错误写法
fun testJavaKotlinCompile() {
val nonNullList = ArrayList<String>()
//此处ide和编译器都检查不出nonNullList添加了java的null String
nonNullList.add(getNullString())
nonNullList.foreach{ nonNullStr->
//此处会直接crash,因为nonNullStr为空,和上面我们声明的非空变量冲突
nonNullStr.length();
}
}
正确写法
fun testJavaKotlinCompile() {
val nonNullList = ArrayList<String>()
//使用java中方法返回值时,添加?.进行非空判断
getNullString()?.let{
nonNullList.add(it)
}
nonNullList.foreach{ nonNullStr->
nonNullStr.length();
}
}
java代码
public String getNullString(){
return null;
}