相关疑难解决方法(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
查看次数

Kotlin:内在范围 - 这个

我刚刚使用了Kotlins自动重构器,它基本上让我这样:

coverView.viewTreeObserver.addOnPreDrawListener {
    coverView.viewTreeObserver.removeOnPreDrawListener(this)
    true
}
Run Code Online (Sandbox Code Playgroud)

哪个不起作用.IntelliJ向我展示了this引用外部类但不引用OnPreDrawListener.这是为什么?kotlin文档说这总是指最内在的范围.

kotlin

3
推荐指数
1
解决办法
861
查看次数

标签 统计

kotlin ×2

initialization ×1

lazy-evaluation ×1

this ×1