Kotlin中二级构造函数的语法

Kotlin中二级构造函数的语法,kotlin,Kotlin,我有这个代码片段。应说明施工人员的施工顺序: fun main(args: Array<String>) { Sample("T","U") } class Sample(private var s : String) { constructor(t: String, u: String) : this(t) { // I don't get what "this(t)" is! this.s += u } init {

我有这个代码片段。应说明施工人员的施工顺序:

fun main(args: Array<String>) {
    Sample("T","U")
}

class Sample(private var s : String) {
    constructor(t: String, u: String) : this(t) { // I don't get what "this(t)" is!
        this.s += u
    }
    init {
        s += "B"
    }
}
fun main(args:Array){
样本(“T”、“U”)
}
类示例(私有变量s:String){
构造函数(t:String,u:String):这个(t){//我不明白“这个(t)”是什么!
这个.s+=u
}
初始化{
s+=“B”
}
}
二级构造函数声明中的“:this(t)”是什么?

这不是返回类型吗?不是吗?

this(t)
调用主构造函数并将t作为s的参数传递。 你甚至可以这样写:

this(s = "a")
class Sample {

    private var s = ""

    constructor(t: String) {
        s = ...
    }

    constructor(t: String, u: String) {
        s = ...
    }
}
然后将s设置为“a”。
所以顺序是:主构造函数,init,次构造函数。有关更多详细信息:

在本例中,
是委托给主构造函数的关键字。在Kotlin中,当您的类有多个时,它是必需的。 Java的等价物是:

class Simple {
  private String s;
  public Simple(String s) { // Here is your primary constructor
     this.s = s;
  }
  public Simple(String t, String u) { // Here is your secondary constructor 
     this(t);
     this.s += u;
  }
  {
     s += "B"; // Here is the init block
  }
}

除了答案。这是对默认主构造函数的必需调用:

class Sample(private var s: String) { }
就像在Java中一样:

public Sample(String s) {

}

public Sample(String t, String u) {
    this(t); // invoke constructor Sample(String s)
}
要避免此调用,可以这样编写:

this(s = "a")
class Sample {

    private var s = ""

    constructor(t: String) {
        s = ...
    }

    constructor(t: String, u: String) {
        s = ...
    }
}