Kotlin:具有此关键字的辅助构造函数 数据类DisjointSetNode(变量父级:DisjointSetNode,变量数据:T,变量秩:Int){ 构造函数(数据:T):这个(父=这个,数据=数据,秩=0)

Kotlin:具有此关键字的辅助构造函数 数据类DisjointSetNode(变量父级:DisjointSetNode,变量数据:T,变量秩:Int){ 构造函数(数据:T):这个(父=这个,数据=数据,秩=0),kotlin,Kotlin,我想知道为什么我会收到一个错误,说我不能在构造函数调用中使用this关键字,因为我没有首先调用超类构造函数。没有超类,我想让自己成为父类。你知道我该如何做吗?你不能在这个上下文中引用这个,因为它尚未定义 但是,您可以将父项移动到构造函数签名之外。例如: data class DisjointSetNode<T>(var parent: DisjointSetNode<T>, var data: T, var rank: Int) { constructor(data: T

我想知道为什么我会收到一个错误,说我不能在构造函数调用中使用this关键字,因为我没有首先调用超类构造函数。没有超类,我想让自己成为父类。你知道我该如何做吗?

你不能在这个上下文中引用
这个
,因为它尚未定义

但是,您可以将父项移动到构造函数签名之外。例如:

data class DisjointSetNode<T>(var parent: DisjointSetNode<T>, var data: T, var rank: Int) {
constructor(data: T): this(parent = this, data = data, rank = 0)
数据类分离tNode(变量数据:T,变量秩:Int=0){
var parent:DisjointSetNode=this
}

您不能在此上下文中引用此,因为它尚未定义

但是,您可以将父项移动到构造函数签名之外。例如:

data class DisjointSetNode<T>(var parent: DisjointSetNode<T>, var data: T, var rank: Int) {
constructor(data: T): this(parent = this, data = data, rank = 0)
数据类分离tNode(变量数据:T,变量秩:Int=0){
var parent:DisjointSetNode=this
}

问题在于,通过
this(…)
调用另一个构造函数时,您不能调用
this
。您可以查看:

构造函数通过一系列涉及此的一个或多个显式构造函数调用来直接或间接调用自己,这是编译时的一个错误

  • 直接表示在第一个语句中调用
    this(…)
    中的
    this
    ,例如:
    this(this);

  • 间接指在调用
    this(…)
    期间调用其成员,例如:
    this(parent)

但您可以将主构造函数转换为辅助构造函数来实现您的方式,例如:

data class DisjointSetNode<T>(var data: T, var rank: Int = 0) {
    var parent: DisjointSetNode<T> = this
}
数据类分离tNode(变量数据:T,变量秩:Int=0){
var parent:DisjointSetNode=this
构造函数(父:DisjointSetNode,data:T):this(data=data){
this.parent=parent
}
}

问题在于,通过
this(…)
调用另一个构造函数时,您不能调用
this
。您可以查看:

构造函数通过一系列涉及此的一个或多个显式构造函数调用来直接或间接调用自己,这是编译时的一个错误

  • 直接表示在第一个语句中调用
    this(…)
    中的
    this
    ,例如:
    this(this);

  • 间接指在调用
    this(…)
    期间调用其成员,例如:
    this(parent)

但您可以将主构造函数转换为辅助构造函数来实现您的方式,例如:

data class DisjointSetNode<T>(var data: T, var rank: Int = 0) {
    var parent: DisjointSetNode<T> = this
}
数据类分离tNode(变量数据:T,变量秩:Int=0){
var parent:DisjointSetNode=this
构造函数(父:DisjointSetNode,data:T):this(data=data){
this.parent=parent
}
}

这可能是一条错误消息。然而,
这个
还不存在(对
这个()
的调用实际上就是它的存在)。在这种情况下,
this
可能是一个完整的另一个数据类,一个没有
parent
属性的数据类。这可能是一条错误消息。然而,
this
还不存在(对
this()
的调用实际上是使它存在的东西)。在本例中,
可能是一个完整的另一个数据类,一个没有
父属性的数据类。因此,当实例化一个DisjointSetNode时,其效果应该是父属性自动等于其自身?@user3338275是的。创建一个新类时,有一个创建顺序。构造函数首先,然后是内部的其他内容(包括父内容),因此这应该具有在实例化一个DisjointSetNode时使父内容自动等于自身的效果?@user3338275是的。创建一个新类时有一个创建顺序。构造函数排在第一位,然后是内部的其他内容(包括父内容)