UNINITIALIZED_VARIABLE变量_longPressed必须是inistialized

时间:2017-09-08 09:32:00

标签: android kotlin

我有一个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)
}

1 个答案:

答案 0 :(得分:1)

在执行_longPressed变量赋值时的编译时,它首先计算Runnable代码(变量的值)。由于在这种情况下_longPressed不存在,因此会抛出编译错误。

在后一种情况下,在编译时评估Runnable代码时,它只知道它必须调用一个存在的函数removeRunnable,该函数引用类(_longPressed)上存在的变量。