gpt4 book ai didi

class - Kotlin 类初始化语义是什么?

转载 作者:IT老高 更新时间:2023-10-28 13:32:14 25 4
gpt4 key购买 nike

我无法在语言定义中找到任何解释 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) 处初始化而变化。

我很惊讶声明顺序与语言相关,并想了解这背后的决定。我的期望是在调用构造函数主体之前初始化属性。

最佳答案

My expectation would be that properties are initialised before the constructor body is invoked.

好吧,init block 不是 constructor .它是一种不同的构造,允许您执行对象的初始化,并且它们 [init block ] 使用属性初始化器按照声明顺序执行。

构造函数是一种不同的野兽 Ant ,它们是在初始化所有属性并执行所有初始化 block 之后执行的。看下面的例子:

class A(val value: Int) {
constructor(): this(0) {
println("Constructor")
}

init {
println("Init block")
}
}

fun main(args: Array<String>) {
val a = A()
}

输出是:

Init block  
Constructor

您可以将 init block 放置在您想要的任何位置:在 constructor 之前或之后;它总是会在 之前 A 的构造函数(在本例中为辅助构造函数)执行。

关于class - Kotlin 类初始化语义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33688821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com