Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与kotlin类相关的查询_Kotlin_Generics_Gradle Kotlin Dsl - Fatal编程技术网

与kotlin类相关的查询

与kotlin类相关的查询,kotlin,generics,gradle-kotlin-dsl,Kotlin,Generics,Gradle Kotlin Dsl,在这两个类中,输出是相同的,具有相同的参数,那么为什么我们需要使用二级构造函数呢?这两门课的主要区别是什么?请举一个例子告诉我。我们将不胜感激 第一个构造函数有两个构造函数,它们获取一个附加变量,但不使用它,这就是为什么您看不到区别。student1类有一个可选id,默认为-1。如果你不在其他地方使用它,你必须把它移走。实际上,我们在kotlin中不创建这样的类,您可以在构造函数中移动var,val关键字: class student1(firstName : String, lastName

在这两个类中,输出是相同的,具有相同的参数,那么为什么我们需要使用二级构造函数呢?这两门课的主要区别是什么?请举一个例子告诉我。我们将不胜感激

第一个构造函数有两个构造函数,它们获取一个附加变量,但不使用它,这就是为什么您看不到区别。student1类有一个可选id,默认为-1。如果你不在其他地方使用它,你必须把它移走。实际上,我们在kotlin中不创建这样的类,您可以在构造函数中移动
var,val
关键字:

class student1(firstName : String, lastName : String){
    var id : Int = -1
    val firstName = firstName
    val lastName = lastName

    init {
       println("initialized")
    }

    constructor(firstName : String, lastName : String, extraParam : Int) : this(firstName, lastName){    
        this.id = extraParam
    }
    
    fun callme(){
        print(firstName + lastName)
    }
}


class student2(firstName : String, lastName : String){
    val firstName = firstName
    val lastName = lastName
    
    fun callme() {
        print(firstName + lastName)
    }
}

fun main() {

  val p1 = student1("shubham", "sharma")   
  println(p1.firstName)
  println(p1.lastName)
  println(p1.callme())
  val p2 = student1("shubham", "sharma")   
  println(p2.firstName)
  println(p2.lastName)
  println(p2.callme())

}
您甚至可以使用默认参数将其缩短,删除辅助构造函数并将id设为val(如果您不想更改它):


没有区别,因为您只使用student1

class Student1(val firstName : String, val lastName : String, val id: Int = -1) {
    
    init { println("initialized") }

    fun callme() { print(firstName + lastName) }
}
而不是

val p2 = student1("shubham", "sharma")
要看到差异,您必须使其可见:

val p2 = student2("shubham", "sharma")  
然后将student1与二级构造函数一起使用:

class student1 ...
    
    fun callme(){
        print(firstName + lastName + id)
    }
将输出

  val p3 = student1("shubham", "sharma", 2021)   
  println(p3.firstName)
  println(p3.lastName)
  println(p3.callme())

是 啊我只是想看看到底有什么区别。你在上一篇文章中说,我想使用更简短的代码,但我想,即使我们可以明确地做这些事情,为什么次要的cons会被使用。谢谢你的礼貌回应!不客气。如果答案对你有帮助,你可以把它标记为被接受的答案:D你能举一个例子,让我们看到二级构造函数的最佳用途吗?看到了吗?是的,我已经做过了,但没有得到这个收缩器的主马达!谢谢你,明白了。非常感谢您抽出时间。但是你能举一个例子,我们可以看到次要构造函数的主要作用吗?使用p1和主要构造函数,你接受id的默认值,使用p3和次要构造函数,你给
extraParam
->
id
一个显式值。摘自“编程Kotlin(Big Nerd Ranch Guide)”:当您指定一个主构造函数时,您会说,“这个类的任何实例都需要这些参数。”当您指定一个辅助构造函数时,您提供了构造该类的替代方法(同时仍然满足主构造函数的要求).是的,这是有道理的!在这里,主构造函数总是存在于类的任何实例中,如果我们使用二级构造函数,我们可以显式地提供一个额外属性以及主构造函数的委托,不是吗?@shubhamKUMAR-Exact!
  val p3 = student1("shubham", "sharma", 2021)   
  println(p3.firstName)
  println(p3.lastName)
  println(p3.callme())
shubhamsharma2021kotlin.Unit