Tag: 初始化

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

我试图从另一个问题的答案概括我的黑客。 它应该提供一种方法来引用一个尚未在其构造器中构造的值(当然,不是直接的,而是在lambda表达式和对象表达式中)。 我现在所拥有的: 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 } 它的作品,看到这个例子: class Holder(var x: Int = 0, val action: () -> Unit) […]

Kotlin – 属性必须被初始化或者是抽象的,即使有一个init()函数

我已经使用Android Studio 3.0将此代码从Java转换为Kotlin internal var background: Drawable internal var xMark: Drawable private fun init() { background = ColorDrawable(Color.RED) xMark = ContextCompat.getDrawable(this@Subscriptions_main, R.drawable.delete) } 在第1和第2行,我收到错误: 财产必须被初始化或是抽象的 即使它将在init函数中初始化。 在写字: internal var background: Drawable? = null internal var xMark: Drawable? = null 一个可行和有效的解决方案? 还有其他更好的方法吗?

为什么Kotlin不允许使用基本类型的lateinit?

在Kotlin语言中,我们默认情况下必须在引入每个变量时对其进行初始化。 为了避免这种情况,可以使用lateinit关键字。 在初始化之前引用一个lateinit变量会导致运行时异常。 然而, lateinit不能和原始类型一起使用。 为什么这样?

什么是Kotlin类初始化语义?

我一直无法在解释Kotlin中一个类的初始化的语言定义中找到任何东西。 import java.util.Properties fun main(args: Array<String>) { val out = MyClass() out.fn() } class MyClass { private val a = Properties() // 1 init { fn() } public fun fn() { println("Fn called. a = $a") } // private val a = Properties() // 2 } 运行这个程序的结果会根据属性是在(1)还是在(2)初始化而改变。 我很惊讶宣言的顺序与语言有关,并希望了解这背后的决定。 我的期望是在调用构造函数体之前初始化属性。

在Kotlin中通过解构初始化val

最初我想实现 class NotationDiceRoll(notation: String) { val rolls: Int val sides: Int init { parseNotation(notation) } private fun parseNotation(notation: String) { rolls = 1 sides = 4 } } 但是Kotlin抱怨说“Val不能被重新分配”。 似乎唯一可以赋值val的地方是init块。 好吧,毕竟这是比较明显的。 所以我改变了 class NotationDiceRoll(notation: String) { val rolls: Int val sides: Int init { (rolls, sides) = parseNotation(notation) } private fun parseNotation(notation: String): Pair<Int, Int> […]

在kotlin中初始化数组

我在kotlin中创建一个haiku生成器,但是我得到一个奇怪的“变量firstLineArray必须初始化”在这个代码块上。 import java.util.Random fun oneSyllableWords() : String{ val oneSyllableWordArray = arrayOf("Life", "Love", "One", "On", "No", "Go") val random = Random() val randint = random.nextInt(oneSyllableWordArray.size) return oneSyllableWordArray[randint] } fun main(args:Array<String>){ var firstLineArray : Array<String> var syllablesRemaining = 5 while(syllablesRemaining<0) { val random = Random() val randint = random.nextInt(4) + 1 for (i in 0..4){ if(randint == […]