我是 Kotlin 的新手。我有一个 android 项目,我选择将其转换为 kotlin。这是我的一段代码。
import com.beardedhen.androidbootstrap.BootstrapButton
class EndTrip : AppCompatActivity(){
internal var endtrip: BootstrapButton ?= null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_end_trip)
endtrip.setOnClickListener(View.OnClickListener {
//Some code here
}
}
}
但是我在旅行中遇到了这个错误
智能转换到 BootsrapButton 是不可能的,因为 endtrip 是此时已更改的可变属性
已在此处回答了类似的问题,但我无法找出解决方案。我正在使用beardedhen Android Bootstrap 库。谢谢你。
该错误告诉您,您无法保证endtrip
该行代码不为空。原因是它endtrip
是一个var
. 它可以被其他线程改变,即使您在使用该变量之前进行了空检查。
下面是官方文档的解释:
请注意,当编译器无法保证变量在检查和使用之间不会更改时,智能转换不起作用。更具体地说,智能转换适用于以下规则:
- val局部变量 - 始终;
- val属性 - 如果属性是私有的或内部的,或者检查是在声明属性的同一模块中执行的。智能强制转换不适用于具有自定义 getter 的开放属性或属性;
- var局部变量 - 如果变量在检查和使用之间没有被修改,并且没有被修改它的 lambda 捕获;
- var属性 - 从不(因为该变量可以随时被其他代码修改)。
最简单的解决方案是使用安全呼叫运营商 ?.
endtrip?.setOnClickListener(View.OnClickListener {
//Some code here
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句