必须初始化变量'runnable'

Gen*_*ons 16 java android kotlin

为什么Kotlin抱怨这个:

class MyActivity : Activity {
  private var handler:Handler = Handler()

  private var runnable: Runnable = Runnable {
    /* Do something very important */
    handler.postDelayed(this@MyActivity.runnable, 5000)
  }
}
Run Code Online (Sandbox Code Playgroud)

编译器抱怨说Variable 'runnable' must be initialized,在Line中它是由处理程序再次发布的.这在纯Java中有效:

private Handler handler = new Handler();

private Runnable runnable = new Runnable() {
    @Override
    public void run() {
        handler.postDelayed(runnable, 5000);
    }
};
Run Code Online (Sandbox Code Playgroud)

hot*_*key 19

Kotlin认为属性未初始化直到其初始化程序结束,因此它不能在自己的初始化程序中使用,即使在lambdas中也是如此.这种语义类似于其初始化程序局部变量使用的限制.

有几种解决方法: