我有一个Handler和Runnable,当runnable执行时我需要从我的处理程序中删除回调。
如果我这样做,那么
private val _handler = Handler()
private val _longPressed: Runnable = Runnable {
_handler.removeCallbacks(_longPressed)
}
编译时错误发生,错误为UNINITIALIZED_VARIABLE
如果我将removeCallBacks方法移动到函数中,错误消失了,我很有意思,有什么区别?
private val _longPressed: Runnable = Runnable {
removeRunnable()
}
fun removeRunnable(){
_handler.removeCallbacks(_longPressed)
}
答案 0 :(得分:1)
在执行_longPressed
变量赋值时的编译时,它首先计算Runnable代码(变量的值)。由于在这种情况下_longPressed
不存在,因此会抛出编译错误。
在后一种情况下,在编译时评估Runnable代码时,它只知道它必须调用一个存在的函数removeRunnable
,该函数引用类(_longPressed)上存在的变量。