相关疑难解决方法(0)

编写Kotlin util函数,在初始化程序中提供自引用

我试图将我的黑客从另一个问题的答案中推广出来.

它应该提供一种方法来引用一个尚未在其初始化器中构造的值(当然,不是直接,而是在lambdas和对象表达式中).

我现在所拥有的:

class SelfReference<T>(val initializer: SelfReference<T>.() -> T) {
    val self: T by lazy {
        inner ?: throw IllegalStateException("Do not use `self` until initialized.")
    }

    private val inner = initializer()
}

fun <T> selfReference(initializer: SelfReference<T>.() -> T): T {
    return SelfReference(initializer).self
}
Run Code Online (Sandbox Code Playgroud)

它有效,请看这个例子:

class Holder(var x: Int = 0,
             val action: () -> Unit)

val h: Holder = selfReference { Holder(0) { self.x++ } }
h.action()
h.action()
println(h.x) //2
Run Code Online (Sandbox Code Playgroud)

但在这一点上,initializer引用构造值的方式是self属性.

我的问题是:有没有办法重写SelfReference所以 …

initialization this lazy-evaluation kotlin

10
推荐指数
1
解决办法
1485
查看次数

在java中每2秒重复一次操作

我必须每2秒重复一次我的代码,我怎么能这样做?不要告诉我使用 try { Thread.sleep(millisecondi); } catch (Exception e) {}

因为冻结了应用程序

java timer delay

0
推荐指数
1
解决办法
2万
查看次数

标签 统计

delay ×1

initialization ×1

java ×1

kotlin ×1

lazy-evaluation ×1

this ×1

timer ×1