首页 > 解决方案 > 了解 Kotlin 中的二级构造函数

问题描述

我不了解this对象的使用和创建方式或构造函数的调用方式以及以下代码中发生的情况。

class Person {
    var children: MutableList<Person> = mutableListOf<Person>();
    constructor(parent: Person) {
        parent.children.add(this)
    }
}

class Person(val name: String) {
    var children: MutableList<Person> = mutableListOf<Person>();
    constructor(name: String, parent: Person) : this(name) {
        parent.children.add(this)
    }
}

来源:https ://kotlinlang.org/docs/reference/classes.html

标签: kotlin

解决方案


: this(...)call 表示调用另一个构造函数,因此每个对象也是使用主构造函数构造的。

class Person /* a */ (val name: String) {
    var children: MutableList<Person> = mutableListOf<Person>();
    /* b */ constructor(name: String, parent: Person) : this(name) {
        parent.children.add(this)
    }
}

在这个例子中,在 之后有主构造函数,在 之后有a次构造函数b,所以有两种方法可以实例化这个类。

  1. 调用主构造函数:Person("abc").
  2. 调用二级构造函数:Person("abc", Person("dfg")),保证主构造函数和二级构造函数都会被调用。

推荐阅读