我试图将我的黑客从另一个问题的答案中推广出来.
它应该提供一种方法来引用一个尚未在其初始化器中构造的值(当然,不是直接,而是在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所以 …
我必须每2秒重复一次我的代码,我怎么能这样做?不要告诉我使用
try {
Thread.sleep(millisecondi);
}
catch (Exception e) {}
因为冻结了应用程序