当我们把Java自动转成Kotlin的时候,代码里会出现很多非空断言!!。或者某些场景下因为IDE提示或编译错误,也让我们自己加上了一些!!。 但使用!!的后果是有可能抛出IllegalArgumentException:Parameter specified as non-null is null。
disposable?.let { if (!it.isDisposed) it.dispose() }
用Val替代Var
1 2 3 4 5 6 7 8 9 10
var mutableString:String? = null
funrun() { mutableString = "a" printText(mutableString) }
funprintText(text: String) { ... }
此时会报错Smart cast to 'String' is impossible, because 'multableString' is a mutable property that could have been changed by this time :app:compileDebugKotlin FAILED。由于multableString是Var变量,为了避免多线程对变量的修改而出现Null的情况,kotlin从编译上进行了限制。
解决方法1是把var变量改为val变量
1 2 3 4 5
val mutableString:String = "a"
funrun() { printText(mutableString) }
解决方法2是写一个新的val变量,将var变量赋值给它,将val作为参数
1 2 3 4 5
funrun() { mutableString = "a" val string = mutableString ?: "" printText(string) }