Kotlin:使用此关键字的辅助构造函数
data class DisjointSetNode<T>(var parent: DisjointSetNode<T>, var data: T, var rank: Int) { constructor(data: T): this(parent = this, data = data, rank = 0)
我想知道为什么我得到一个错误,说我不能在构造函数调用中使用this关键字,因为我没有先调用超类的构造函数。 没有超类,我想让自己成为父母。 任何想法,我会怎么做呢?
问题是你不能通过this(...)
调用另一个构造函数。 你可以看看JLS :
构造函数通过一系列一个或多个显式构造函数调用来直接或间接地调用自身,这是编译时错误。
-
直接意味着在第一个语句中调用
this
this(...)
,例如:this(this);
。 -
间接意味着在呼叫
this(...)
呼叫其成员,例如:this(parent)
。
但是您可以将主要构造函数转换为次要构造函数来实现您的方式,例如:
data class DisjointSetNode<T>(var data: T, var rank: Int = 0) { var parent: DisjointSetNode<T> = this constructor(parent: DisjointSetNode<T>, data: T) : this(data = data){ this.parent = parent } }
你不能在这个上下文中引用this
,因为它尚未定义。
但是,您可以将parent
移到构造函数签名之外。 例如:
data class DisjointSetNode<T>(var data: T, var rank: Int = 0) { var parent: DisjointSetNode<T> = this }