相关疑难解决方法(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监听器内未解决的引用

我有下面的代码.这是Kotlin.知道为什么textToSpeech来自于textToSpeech.setLanguage(Locale.UK)告诉没有参考解决textToSpeech

val textToSpeech = TextToSpeech(
            applicationContext,
            object : TextToSpeech.OnInitListener {
                override fun onInit(status: Int) {
                    if (status == TextToSpeech.SUCCESS) {
                        textToSpeech.setLanguage(Locale.UK)
                    }
                }

            })
Run Code Online (Sandbox Code Playgroud)

起初我认为它是一个Idea kotlin插件bug,但似乎它实际上无法编译

android text-to-speech kotlin

6
推荐指数
1
解决办法
1068
查看次数