Мне не удалось найти что-либо в определении языка, которое объясняет инициализацию класса в Котлин.
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).
Я удивлен, что порядок декларации имеет отношение к этому языку и хотел бы понять решения, стоящие за этим. Мое ожидание будет состоять в том, что свойства инициализируются до того, как будет вызван тело конструктора.