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