我对Kotlin如何管理属性名称和主要构造函数参数名称有些困惑。如果我写了相同的属性名称和参数名称,那么kotlin编译器将给出错误。
class Student(name : String, roll : Int){
val name: String
init {
name = "Asif"
}
}
它给出了这个错误。
> Error:(9, 5) Kotlin: Property must be initialized or be abstract
> Error:(12, 9) Kotlin: Val cannot be reassigned
但是,当我更改属性
val name : String
的名称或更改主要构造函数name : String
的参数的名称时,该代码将起作用并进行编译。这将正常工作或编译。
class Student(pName : String, roll : Int){
val name: String
init {
name = "Asif"
}
}
这背后的原因是什么?为什么我们不能拥有相同的主构造函数的参数名称和属性名称?
最佳答案
在属性初始值设定项和初始值设定项块中提供了主要的构造函数参数(这使主要的构造函数具有特殊性)。
在init
块中,name
指的是构造函数参数,与所有其他函数参数一样,该参数不能重新分配。这是第二个错误。第一个是出于相同的原因,现在您的属性未在任何地方初始化。
如果要初始化属性,仍可以将其称为this.name
:
class Student(name : String, roll : Int){
val name: String
init {
this.name = "Asif"
}
}
关于kotlin - Kotlin中的相同属性名称和主要构造函数参数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51291355/