类型检查已经在kotlin中进行递归

val cycleRunnable = Runnable { handler.postDelayed(cycleRunnable,100) } 

我得到错误错误:(219,29)类型检查已经遇到递归问题。 最简单的解决方法:明确指定声明的类型

但是它的确切的Java版本没有任何错误

 private final Runnable cycleRunnable = new Runnable() { public void run() { handler.postDelayed(cycleRunnable, POST_DELAY); } }; 

Kotlin禁止在其初始化程序中使用变量或属性。

您可以像在Java中一样使用对象表达式来实现Runnable

 val cycleRunnable = object : Runnable { override fun run() { handler.postDelayed(this, 100) } } 

另一种方法是使用一些函数来返回Runnable并在传递给它的lambda表达式中使用cycleRunnable ,例如:

 val cycleRunnable: Runnable = run { Runnable { println(cycleRunnable) } } 

或者看一个解决方法,它允许一个变量在自己的初始化程序中通过自引用被使用 :

这段代码无法正常工作:您需要从上面的链接添加utils或使用kotlin-fun库:

 val cycleRunnable: Runnable = selfReference { Runnable { handler.postDelayed(self, 100) } } 

这个怎么样? 你可以用对象表达式替换它,这是因为你不能在lambda体中引用lambda表达式,因为cycleRunnable还没有被初始化。

 val cycleRunnable = object:Runnable { override fun run() { handler.postDelayed(this, 100) } } 

或者 ,如果cycleRunnable是一个属性,则使用lazy委托属性,例如:

 val cycleRunnable: Runnable by lazy { Runnable { handler.postDelayed(cycleRunnable, 100) } }