类型检查已经在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) } }