kotlin - 了解 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)
}
}
解决方案
: 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
,所以有两种方法可以实例化这个类。
- 调用主构造函数:
Person("abc")
. - 调用二级构造函数:
Person("abc", Person("dfg"))
,保证主构造函数和二级构造函数都会被调用。
推荐阅读
- mysql - 作为裁判的最高比赛
- asp.net-core - 如何反序列化 GraphQL 服务器对对象的响应?
- web-audio-api - WebAudio API - 没有输入的节点会消耗处理能力吗?
- node.js - 快速发送响应并在客户端捕获它
- r - 比较 R 中的两个表以找出客户没有在一组条件下购买的产品
- javascript - Sublime Text 4 配色方案规则来控制 JavaScript 不带引号的对象文字键?
- scala - 在sbt中,如何让跨版本插件顺利失败?
- javascript - 为什么即使我在 package.json 中将主入口点更改为 app.js,也需要 index.js?
- json - 检查 JSON 数组中是否存在值,如果不存在则检查下一个数组(Swift / SwiftUI)
- java - 当我在 IDE 中运行我的代码时,它会加载纹理,但在导出时,它不会